44 subroutine create(self,dt,npx,npy,npz,ptop,ak,bk)
48 class(fv3jedi_lm_type),
intent(inout) :: self
50 real(kind=kind_real),
intent(in) :: dt, ptop
51 integer,
intent(in) :: npx,npy,npz
52 real(kind=kind_real),
intent(in) :: ak(npz+1), bk(npz+1)
57 allocate(self%conf%ak(npz+1))
58 allocate(self%conf%bk(npz+1))
63 call self%fv3jedi_lm_dynamics%create(self%conf)
66 self%conf%isc = self%fv3jedi_lm_dynamics%FV_Atm(1)%bd%isc
67 self%conf%iec = self%fv3jedi_lm_dynamics%FV_Atm(1)%bd%iec
68 self%conf%jsc = self%fv3jedi_lm_dynamics%FV_Atm(1)%bd%jsc
69 self%conf%jec = self%fv3jedi_lm_dynamics%FV_Atm(1)%bd%jec
70 self%conf%isd = self%fv3jedi_lm_dynamics%FV_Atm(1)%bd%isd
71 self%conf%ied = self%fv3jedi_lm_dynamics%FV_Atm(1)%bd%ied
72 self%conf%jsd = self%fv3jedi_lm_dynamics%FV_Atm(1)%bd%jsd
73 self%conf%jed = self%fv3jedi_lm_dynamics%FV_Atm(1)%bd%jed
74 self%conf%npx = self%fv3jedi_lm_dynamics%FV_Atm(1)%npx
75 self%conf%npy = self%fv3jedi_lm_dynamics%FV_Atm(1)%npy
76 self%conf%npz = self%fv3jedi_lm_dynamics%FV_Atm(1)%npz
77 self%conf%hydrostatic = self%fv3jedi_lm_dynamics%FV_Atm(1)%flagstruct%hydrostatic
80 self%conf%im = (self%conf%iec-self%conf%isc+1)
81 self%conf%jm = (self%conf%jec-self%conf%jsc+1)
82 self%conf%lm = self%conf%npz
85 if (self%conf%do_phy_trb == 0 .and. self%conf%do_phy_mst == 0) self%conf%do_phy = 0
88 if (self%conf%do_phy == 1)
call self%fv3jedi_lm_physics%create(self%conf)
91 if ((self%conf%npx .ne. npx) .or. (self%conf%npy .ne. npy) .or. (self%conf%npz .ne. npz) )
then 92 if (self%conf%rpe) print*,
'fv3jedi tlm/adm problem: dynamics creating different grid than inputs created for' 97 call allocate_traj(self%traj,self%conf%isc,self%conf%iec,self%conf%jsc,self%conf%jec,&
98 self%conf%npz,self%conf%hydrostatic,self%conf%do_phy_mst)
99 call allocate_pert(self%pert,self%conf%isc,self%conf%iec,self%conf%jsc,self%conf%jec,self%conf%npz,self%conf%hydrostatic)
109 class(fv3jedi_lm_type),
intent(inout) :: self
111 if (self%conf%do_dyn == 1)
call self%fv3jedi_lm_dynamics%init_nl(self%conf,self%pert,self%traj)
112 if (self%conf%do_phy == 1)
call self%fv3jedi_lm_physics%init_nl(self%conf,self%pert,self%traj)
122 class(fv3jedi_lm_type),
intent(inout) :: self
126 if (self%conf%do_dyn == 1)
call self%fv3jedi_lm_dynamics%init_tl(self%conf,self%pert,self%traj)
127 if (self%conf%do_phy == 1)
call self%fv3jedi_lm_physics%init_tl(self%conf,self%pert,self%traj)
137 class(fv3jedi_lm_type),
intent(inout) :: self
141 if (self%conf%do_dyn == 1)
call self%fv3jedi_lm_dynamics%init_ad(self%conf,self%pert,self%traj)
142 if (self%conf%do_phy == 1)
call self%fv3jedi_lm_physics%init_ad(self%conf,self%pert,self%traj)
152 class(fv3jedi_lm_type),
intent(inout) :: self
154 if (self%conf%do_dyn == 1)
call self%fv3jedi_lm_dynamics%step_nl(self%conf,self%traj)
155 if (self%conf%do_phy == 1)
call self%fv3jedi_lm_physics%step_nl(self%conf,self%traj)
165 class(fv3jedi_lm_type),
intent(inout) :: self
168 if (self%conf%do_dyn == 1)
call self%fv3jedi_lm_dynamics%step_tl(self%conf,self%traj,self%pert)
169 if (self%conf%do_phy == 1)
call self%fv3jedi_lm_physics%step_tl(self%conf,self%traj,self%pert)
180 class(fv3jedi_lm_type),
intent(inout) :: self
183 if (self%conf%do_phy == 1)
call self%fv3jedi_lm_physics%step_ad(self%conf,self%traj,self%pert)
184 if (self%conf%do_dyn == 1)
call self%fv3jedi_lm_dynamics%step_ad(self%conf,self%traj,self%pert)
194 class(fv3jedi_lm_type),
intent(inout) :: self
204 class(fv3jedi_lm_type),
intent(inout) :: self
215 class(fv3jedi_lm_type),
intent(inout) :: self
227 class(fv3jedi_lm_type),
intent(inout) :: self
229 if (self%conf%do_dyn == 1)
call self%fv3jedi_lm_dynamics%delete(self%conf)
230 if (self%conf%do_phy == 1)
call self%fv3jedi_lm_physics%delete(self%conf)
232 deallocate(self%conf%ak)
233 deallocate(self%conf%bk)
247 type(fv3jedi_lm_pert),
intent(inout) :: pert
249 pert%ua = 0.0_kind_real
250 pert%va = 0.0_kind_real
251 pert%cfcn = 0.0_kind_real
subroutine final_ad(self)
Top level for fv3jedi linearized model.
subroutine, public allocate_traj(traj, isc, iec, jsc, jec, npz, hydrostatic, dpm)
Fortran derived type to hold the linearized model increment.
subroutine, public deallocate_traj(traj)
subroutine, public delete(self)
Top level for fv3jedi linearized dynamical core.
subroutine, public deallocate_pert(pert)
Physics driver for fv3-jedi linearized model Just calls its children in turn if turned on...
Fortran derived type to hold the linearized model trajectory.
subroutine ipert_to_zero(pert)
subroutine final_nl(self)
Fortran derived type to hold the linearized model configuration.
subroutine final_tl(self)
subroutine, public create(self, geom, vars)
subroutine, public allocate_pert(pert, isc, iec, jsc, jec, npz, hydrostatic)