Changeset 3957 for LMDZ6/branches/LMDZ-tracers/libf/dyn3d/dynetat0.F90
- Timestamp:
- Jul 11, 2021, 11:39:01 PM (3 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/LMDZ-tracers/libf/dyn3d/dynetat0.F90
r3890 r3957 6 6 ! Purpose: Initial state reading. 7 7 !------------------------------------------------------------------------------- 8 USE readTracFiles_mod, ONLY: known_phases, old_phases, nphases, phases_sep 8 9 USE infotrac, ONLY: nqtot, niso, tracers, iTraPha, tnat, alpha_ideal, tra 9 10 USE netcdf, ONLY: NF90_OPEN, NF90_NOWRITE, NF90_INQ_VARID, NF90_NoErr, & … … 17 18 USE serre_mod, ONLY: clon, clat, grossismx, grossismy 18 19 USE temps_mod, ONLY: annee_ref, day_ini, day_ref, itau_dyn, start_time 19 USE ener_mod, ONLY: etot0,ptot0,ztot0,stot0,ang020 USE ener_mod, ONLY: etot0, ptot0, ztot0, stot0, ang0 20 21 21 22 IMPLICIT NONE … … 37 38 !=============================================================================== 38 39 ! Local variables: 39 CHARACTER(LEN=256) :: sdum, var, modname, oldH2O (3), newH2O(3)40 CHARACTER(LEN=256) :: sdum, var, modname, oldH2O 40 41 INTEGER, PARAMETER :: length=100 41 INTEGER :: iq, fID, vID, idecal, ix !, iml, jml, lml, nqt42 INTEGER :: iq, fID, vID, idecal, ix, ip 42 43 REAL :: time, tab_cntrl(length) !--- RUN PARAMS TABLE 43 TYPE(tra), POINTER :: tr44 TYPE(tra), POINTER :: tr 44 45 !------------------------------------------------------------------------------- 45 46 modname="dynetat0" 46 oldH2O=['H2Ov ','H2Ol ','H2Oi ']47 newH2O=['H2O-g','H2O-l','H2O-s']48 47 49 48 !--- Initial state file opening … … 107 106 CALL check_dim(jm,jjm,'jm','jm') 108 107 CALL check_dim(lllm,llm,'lm','lllm') 109 CALL get_var1("rlonu", rlonu)110 CALL get_var1("rlatu", rlatu)111 CALL get_var1("rlonv", rlonv)112 CALL get_var1("rlatv", rlatv)113 CALL get_var2("cu" ,cu)114 CALL get_var2("cv" ,cv)115 CALL get_var2("aire" ,aire)108 CALL get_var1("rlonu", rlonu) 109 CALL get_var1("rlatu", rlatu) 110 CALL get_var1("rlonv", rlonv) 111 CALL get_var1("rlatv", rlatv) 112 CALL get_var2("cu", cu) 113 CALL get_var2("cv", cv) 114 CALL get_var2("aire", aire) 116 115 var="temps" 117 116 IF(NF90_INQ_VARID(fID,var,vID)/=NF90_NoErr) THEN … … 121 120 END IF 122 121 CALL err(NF90_GET_VAR(fID,vID,time),"get",var) 123 CALL get_var2("phisinit", phis)124 CALL get_var3("ucov", ucov)125 CALL get_var3("vcov", vcov)126 CALL get_var3("teta", teta)127 CALL get_var3("masse", masse)128 CALL get_var2("ps", ps)122 CALL get_var2("phisinit", phis) 123 CALL get_var3("ucov", ucov) 124 CALL get_var3("vcov", vcov) 125 CALL get_var3("teta", teta) 126 CALL get_var3("masse", masse) 127 CALL get_var2("ps", ps) 129 128 130 129 !--- Tracers … … 132 131 tr => tracers(iq) 133 132 var = tr%name 134 IF(NF90_INQ_VARID(fID,var,vID)==NF90_NoErr) THEN 135 CALL err(NF90_GET_VAR(fID,vID,q(:,:,:,iq)),"get",var); CYCLE 133 ix = strIdx([('H2O'//phases_sep//known_phases(ip:ip), ip=1, nphases)], var) 134 IF(NF90_INQ_VARID(fID, var, vID) == NF90_NoErr) THEN 135 CALL get_var3(var, q(:,:,:,iq)) 136 136 #ifdef INCA 137 ELSE IF(var == "O3") THEN !--- INCA and O3 missing: take OX instead 138 WRITE(lunout,*) 'Tracer O3 is missing - it is initialized to OX' 139 IF(NF90_INQ_VARID(fID,"OX",vID) == NF90_NoErr) THEN 140 CALL err(NF90_GET_VAR(fID,vID,q(:,:,:,iq)),"get",var); CYCLE 141 END IF 137 ELSE IF(NF90_INQ_VARID(fID, 'OX', vID) == NF90_NoErr .AND. var == 'O3') THEN 138 WRITE(lunout,*)TRIM(modname)//': Tracer <O3> is missing => initialized to OX' 139 CALL get_var3('OX', q(:,:,:,iq)) 142 140 #endif 143 ELSE !--- Old file, water: H2Ov/l/i instead of H2O-g/-l/-s 144 ix = strIdx(newH2O, var) !--- Current tracer is water (new name) ? 145 IF(ix /= 0) THEN !--- Then read the field, using the old name. 146 IF(NF90_INQ_VARID(fID,oldH2O(ix),vID) == NF90_NoErr) THEN 147 CALL err(NF90_GET_VAR(fID,vID,q(:,:,:,iq)),"get",var); CYCLE 148 END IF 141 ELSE IF(ix /= 0) THEN !--- Old file, water: H2Ov/l/i instead of H2O_g/_l/_s 142 oldH2O = 'H2O'//old_phases(ix:ix) 143 IF(NF90_INQ_VARID(fID, oldH2O, vID) == NF90_NoErr) THEN 144 WRITE(lunout,*)TRIM(modname)//': Tracer <'//TRIM(var)//'> is missing => initialized to '//TRIM(oldH2O) 145 CALL get_var3(oldH2O, q(:,:,:,iq)) 146 END IF 147 ELSE 148 WRITE(lunout,*)TRIM(modname)//': Tracer <'//TRIM(var)//'> is missing => initialized to zero' 149 q(:,:,:,iq)=0. 150 !--- CRisi: for isotopes, theoretical initialization using very simplified Rayleigh distillation law 151 IF(niso > 0 .AND. tr%iso_num > 0) THEN 152 IF(tr%iso_zon == 0) q(:,:,:,iq) = q(:,:,:,tr%iprnt) * tnat(tr%iso_num) & 153 *(q(:,:,:,tr%iprnt)/30.e-3)**(alpha_ideal(tr%iso_num)-1) 154 IF(tr%iso_zon == 1) q(:,:,:,iq) = q(:,:,:,iTraPha(tr%iso_num,tr%iso_pha)) 149 155 END IF 150 156 END IF 151 WRITE(lunout,*)TRIM(modname)//": Tracer <"//TRIM(var)//"> is missing"152 WRITE(lunout,*)" It is hence initialized to zero"153 q(:,:,:,iq)=0.154 !--- CRisi: for isotops, theoretical initialization using very simplified155 ! Rayleigh distillation las.156 IF(niso > 0 .AND. tr%iso_num > 0) THEN157 IF(tr%iso_zon == 0) q(:,:,:,iq) = q(:,:,:,tr%iprnt) * tnat(tr%iso_num) &158 *(q(:,:,:,tr%iprnt)/30.e-3)**(alpha_ideal(tr%iso_num)-1)159 IF(tr%iso_zon == 1) q(:,:,:,iq) = q(:,:,:,iTraPha(tr%iso_num,tr%iso_pha))160 END IF161 157 END DO 162 163 158 CALL err(NF90_CLOSE(fID),"close",fichnom) 164 159 day_ini=day_ini+INT(time) … … 176 171 s1='value of '//TRIM(str1)//' =' 177 172 s2=' read in starting file differs from parametrized '//TRIM(str2)//' =' 178 WRITE(sdum,'(10x,a,i4,2x,a,i4)'),TRIM( ADJUSTL(s1)),n1,TRIM(ADJUSTL(s2)),n2173 WRITE(sdum,'(10x,a,i4,2x,a,i4)'),TRIM(s1),n1,TRIM(s2),n2 179 174 CALL ABORT_gcm(TRIM(modname),TRIM(sdum),1) 180 175 END IF … … 182 177 183 178 184 SUBROUTINE get_var1(var, v)179 SUBROUTINE get_var1(var, v) 185 180 CHARACTER(LEN=*), INTENT(IN) :: var 186 181 REAL, INTENT(OUT) :: v(:) … … 190 185 191 186 192 SUBROUTINE get_var2(var, v)187 SUBROUTINE get_var2(var, v) 193 188 CHARACTER(LEN=*), INTENT(IN) :: var 194 189 REAL, INTENT(OUT) :: v(:,:) … … 198 193 199 194 200 SUBROUTINE get_var3(var, v)195 SUBROUTINE get_var3(var, v) 201 196 CHARACTER(LEN=*), INTENT(IN) :: var 202 197 REAL, INTENT(OUT) :: v(:,:,:) … … 206 201 207 202 208 SUBROUTINE err(ierr, typ,nam)203 SUBROUTINE err(ierr, typ, nam) 209 204 INTEGER, INTENT(IN) :: ierr !--- NetCDF ERROR CODE 210 205 CHARACTER(LEN=*), INTENT(IN) :: typ !--- TYPE OF OPERATION
Note: See TracChangeset
for help on using the changeset viewer.