Changeset 4120 for LMDZ6/trunk/libf/dyn3dmem
- Timestamp:
- Apr 5, 2022, 3:44:30 PM (4 years ago)
- Location:
- LMDZ6/trunk/libf/dyn3dmem
- Files:
-
- 2 edited
-
dynetat0_loc.F90 (modified) (8 diffs)
-
iniacademic_loc.F90 (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/dyn3dmem/dynetat0_loc.F90
r4063 r4120 7 7 !------------------------------------------------------------------------------- 8 8 USE parallel_lmdz 9 USE strings_mod, ONLY: maxlen 10 USE infotrac, ONLY: nqtot, tracers, iqiso, iso_indnum, tnat, alpha_ideal, ok_isotopes 11 USE netcdf, ONLY: NF90_OPEN, NF90_INQUIRE_DIMENSION, NF90_INQ_VARID, & 12 NF90_NOWRITE, NF90_CLOSE, NF90_INQUIRE_VARIABLE, NF90_GET_VAR, NF90_NoErr 9 USE infotrac, ONLY: nqtot, tracers, niso, iqiso, iso_indnum, iso_num, tnat, alpha_ideal, ok_isotopes, iH2O 10 USE strings_mod, ONLY: maxlen, msg, strStack, real2str 11 USE netcdf, ONLY: NF90_OPEN, NF90_NOWRITE, NF90_INQUIRE_DIMENSION, NF90_INQ_VARID, & 12 NF90_CLOSE, NF90_GET_VAR, NF90_INQUIRE_VARIABLE, NF90_NoErr 13 USE readTracFiles_mod, ONLY: new2oldName 13 14 USE control_mod, ONLY: planet_type 14 15 USE assert_eq_m, ONLY: assert_eq 15 16 USE comvert_mod, ONLY: pa,preff 16 USE comconst_mod, ONLY: cpp, daysec, dtvr, g, im, jm, kappa, lllm, & 17 omeg, rad 17 USE comconst_mod, ONLY: cpp, daysec, dtvr, g, im, jm, kappa, lllm, omeg, rad 18 18 USE logic_mod, ONLY: fxyhypb, ysinus 19 19 USE serre_mod, ONLY: clon, clat, grossismx, grossismy 20 USE temps_mod, ONLY: annee_ref,day_ref,itau_dyn, & 21 start_time,day_ini,hour_ini 20 USE temps_mod, ONLY: annee_ref, day_ini, day_ref, itau_dyn, start_time 22 21 USE ener_mod, ONLY: etot0,ptot0,ztot0,stot0,ang0 23 22 24 23 IMPLICIT NONE 25 24 include "dimensions.h" … … 40 39 !=============================================================================== 41 40 ! Local variables: 42 CHARACTER(LEN=maxlen) :: m sg, var, modname41 CHARACTER(LEN=maxlen) :: mesg, var, modname, oldVar 43 42 INTEGER, PARAMETER :: length=100 44 43 INTEGER :: iq, fID, vID, idecal, ierr, iqParent, iName, iZone, iPhase … … 58 57 !!! .... while keeping everything OK for LMDZ EARTH 59 58 IF(planet_type=="generic") THEN 60 WRITE(lunout,*)'NOTE NOTE NOTE : Planeto-like start files'59 CALL msg('NOTE NOTE NOTE : Planeto-like start files', modname) 61 60 idecal = 4 62 61 annee_ref = 2000 63 62 ELSE 64 WRITE(lunout,*)'NOTE NOTE NOTE : Earth-like start files'63 CALL msg('NOTE NOTE NOTE : Earth-like start files', modname) 65 64 idecal = 5 66 65 annee_ref = tab_cntrl(5) … … 106 105 107 106 !------------------------------------------------------------------------------- 108 WRITE(lunout,*)TRIM(modname)//': rad,omeg,g,cpp,kappa',rad,omeg,g,cpp,kappa107 CALL msg('rad, omeg, g, cpp, kappa = '//TRIM(strStack(real2str([rad,omeg,g,cpp,kappa]))), modname) 109 108 CALL check_dim(im,iim,'im','im') 110 109 CALL check_dim(jm,jjm,'jm','jm') … … 120 119 var="temps" 121 120 IF(NF90_INQ_VARID(fID,var,vID)/=NF90_NoErr) THEN 122 WRITE(lunout,*)TRIM(modname)//": missing field <temps>"123 WRITE(lunout,*)TRIM(modname)//": trying with <Time>";var="Time"121 CALL msg('missing field <temps> ; trying with <Time>', modname) 122 var="Time" 124 123 CALL err(NF90_INQ_VARID(fID,var,vID),"inq",var) 125 124 END IF … … 153 152 ALLOCATE(q_glo(ip1jmp1,llm)) 154 153 DO iq=1,nqtot 155 var=TRIM(tracers(iq)%name) 154 var = tracers(iq)%name 155 oldVar = new2oldName(var) 156 !-------------------------------------------------------------------------------------------------------------------------- 157 IF(NF90_INQ_VARID(fID, var, vID) == NF90_NoErr) THEN !=== REGULAR CASE 158 CALL get_var2(var,q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:) 159 !-------------------------------------------------------------------------------------------------------------------------- 160 ELSE IF(NF90_INQ_VARID(fID, oldVar, vID) == NF90_NoErr) THEN !=== OLD NAME 161 CALL msg('Tracer <'//TRIM(var)//'> is missing => initialized to <'//TRIM(oldVar)//'>', modname) 162 CALL get_var2(oldVar, q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:) 163 !-------------------------------------------------------------------------------------------------------------------------- 156 164 #ifdef INCA 157 IF (var .eq. "O3" ) THEN 158 IF(NF90_INQ_VARID(fID,var,vID) == NF90_NoErr) THEN 159 CALL get_var2(var,q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:); CYCLE 160 ELSE 161 WRITE(lunout,*) 'Tracer O3 is missing - it is initialized to OX' 162 IF(NF90_INQ_VARID(fID,"OX",vID) == NF90_NoErr) THEN 163 CALL get_var2("OX",q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:); CYCLE 164 ENDIF 165 ENDIF 166 ENDIF 165 ELSE IF(NF90_INQ_VARID(fID, 'OX', vID) == NF90_NoErr .AND. var == 'O3') THEN !=== INCA: OX INSTEAD OF O3 166 CALL msg('Tracer <O3> is missing => initialized to <OX>', modname) 167 CALL get_var2( 'OX' , q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:) 168 !-------------------------------------------------------------------------------------------------------------------------- 167 169 #endif 168 IF(NF90_INQ_VARID(fID,var,vID)==NF90_NoErr) THEN 169 CALL get_var2(var,q_glo); q(ijb_u:ije_u,:,iq)=q_glo(ijb_u:ije_u,:); CYCLE 170 ELSE IF(tracers(iq)%iso_iGroup == iH2O .AND. niso > 0) THEN !=== WATER ISOTOPES 171 ! iName = tracers(iq)%iso_iName ! (next commit) 172 iName = iso_num(iq) 173 iPhase = tracers(iq)%iso_iPhase 174 iqParent = tracers(iq)%iqParent 175 IF(tracers(iq)%iso_iZone == 0) THEN 176 CALL msg('Tracer <'//TRIM(var)//'> is missing => initialized with a simplified Rayleigh distillation law.', modname) 177 q(ijb_u:ije_u,:,iq)= q(ijb_u:ije_u,:,iqParent)*tnat(iName)*(q(ijb_u:ije_u,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1.) 178 ELSE 179 CALL msg('Tracer <'//TRIM(var)//'> is missing => initialized to its parent isotope concentration.', modname) 180 q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqiso(iso_indnum(iq),iPhase)) 181 END IF 182 !-------------------------------------------------------------------------------------------------------------------------- 183 ELSE !=== MISSING: SET TO 0 184 CALL msg('Tracer <'//TRIM(var)//'> is missing => initialized to zero', modname) 185 q(ijb_u:ije_u,:,iq)=0. 186 !-------------------------------------------------------------------------------------------------------------------------- 170 187 END IF 171 WRITE(lunout,*)TRIM(modname)//": Tracer <"//TRIM(var)//"> is missing"172 WRITE(lunout,*)" It is hence initialized to zero"173 q(ijb_u:ije_u,:,iq)=0.174 !--- CRisi: for isotops, theoretical initialization using very simplified175 ! Rayleigh distillation las.176 iName = tracers(iq)%iso_iName177 IF(.NOT.ok_isotopes .OR. iName <= 0) CYCLE178 iZone = tracers(iq)%iso_iZone179 iPhase= tracers(iq)%iso_iPhase180 iqParent = tracers(iq)%iqParent181 IF(iZone==0) q(:,:,iq) = q(:,:,iqParent)*tnat(iName) &182 & *(q(:,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1.)183 IF(iZone==1) q(:,:,iq) = q(:,:,iqiso(iso_indnum(iq),iPhase))184 188 END DO 185 189 DEALLOCATE(q_glo) … … 199 203 s1='value of '//TRIM(str1)//' =' 200 204 s2=' read in starting file differs from parametrized '//TRIM(str2)//' =' 201 WRITE(m sg,'(10x,a,i4,2x,a,i4)'),s1,n1,s2,n2202 CALL ABORT_gcm(TRIM(modname),TRIM(m sg),1)205 WRITE(mesg,'(10x,a,i4,2x,a,i4)')TRIM(ADJUSTL(s1)),n1,TRIM(ADJUSTL(s2)),n2 206 CALL ABORT_gcm(TRIM(modname),TRIM(mesg),1) 203 207 END IF 204 208 END SUBROUTINE check_dim … … 263 267 IF(ierr==NF90_NoERR) RETURN 264 268 SELECT CASE(typ) 265 CASE('inq'); m sg="Field <"//TRIM(nam)//"> is missing"266 CASE('get'); m sg="Reading failed for <"//TRIM(nam)//">"267 CASE('open'); m sg="File opening failed for <"//TRIM(nam)//">"268 CASE('close'); m sg="File closing failed for <"//TRIM(nam)//">"269 CASE('inq'); mesg="Field <"//TRIM(nam)//"> is missing" 270 CASE('get'); mesg="Reading failed for <"//TRIM(nam)//">" 271 CASE('open'); mesg="File opening failed for <"//TRIM(nam)//">" 272 CASE('close'); mesg="File closing failed for <"//TRIM(nam)//">" 269 273 END SELECT 270 CALL ABORT_gcm(TRIM(modname),TRIM(m sg),ierr)274 CALL ABORT_gcm(TRIM(modname),TRIM(mesg),ierr) 271 275 END SUBROUTINE err 272 276 -
LMDZ6/trunk/libf/dyn3dmem/iniacademic_loc.F90
r4056 r4120 6 6 USE filtreg_mod, ONLY: inifilr 7 7 USE infotrac, ONLY: nqtot, niso_possibles, ok_isotopes, ok_iso_verif, tnat, alpha_ideal, & 8 iqiso, tracers, iso_indnum 8 iqiso, tracers, iso_indnum, iso_num 9 9 USE control_mod, ONLY: day_step,planet_type 10 10 use exner_hyb_m, only: exner_hyb … … 23 23 USE temps_mod, ONLY: annee_ref, day_ini, day_ref 24 24 USE ener_mod, ONLY: etot0,ptot0,ztot0,stot0,ang0 25 USE readTracFiles_mod, ONLY: addPhase 25 26 26 27 ! Author: Frederic Hourdin original: 15/01/93 … … 66 67 real tetastrat ! potential temperature in the stratosphere, in K 67 68 real tetajl(jjp1,llm) 68 INTEGER i,j,l,lsup,ij, iq, iName, i Zone, iPhase, iqParent69 INTEGER i,j,l,lsup,ij, iq, iName, iPhase, iqParent 69 70 70 71 REAL teta0,ttp,delt_y,delt_z,eps ! Constantes pour profil de T … … 280 281 do iq=1,nqtot 281 282 q(ijb_u:ije_u,:,iq)=0. 282 ! IF(tracers(iq)%name == 'H2O'//phases_sep//'g') q(ijb_u:ije_u,:,iq)=1.e-10 283 ! IF(tracers(iq)%name == 'H2O'//phases_sep//'l') q(ijb_u:ije_u,:,iq)=1.e-15 284 IF(tracers(iq)%name == 'H2Ov') q(ijb_u:ije_u,:,iq)=1.e-10 285 IF(tracers(iq)%name == 'H2Ol') q(ijb_u:ije_u,:,iq)=1.e-15 283 IF(tracers(iq)%name == addPhase('H2O', 'g')) q(ijb_u:ije_u,:,iq)=1.e-10 284 IF(tracers(iq)%name == addPhase('H2O', 'l')) q(ijb_u:ije_u,:,iq)=1.e-15 286 285 287 286 ! CRisi: init des isotopes 288 287 ! distill de Rayleigh très simplifiée 289 iName = tracers(iq)%iso_iName 288 ! iName = tracers(iq)%iso_iName ! (next commit) 289 iName = iso_num(iq) 290 290 if (.NOT.ok_isotopes .OR. iName <= 0) CYCLE 291 iZone = tracers(iq)%iso_iZone292 291 iPhase = tracers(iq)%iso_iPhase 293 292 iqParent = tracers(iq)%iqParent 294 if (iZone == 0) q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqParent)*tnat(iName) & 295 *(q(ijb_u:ije_u,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1) 296 if (iZone == 1) q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqiso(iso_indnum(iq),iPhase)) 293 IF(tracers(iq)%iso_iZone == 0) THEN 294 q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqParent)*tnat(iName) & 295 *(q(ijb_u:ije_u,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1.) 296 ELSE 297 q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqiso(iso_indnum(iq),iPhase)) 298 END IF 297 299 enddo 298 300 else
Note: See TracChangeset
for help on using the changeset viewer.
