Changeset 5791 for LMDZ6/branches/contrails/libf/misc/readTracFiles_mod.f90
- Timestamp:
- Jul 28, 2025, 7:23:15 PM (7 days ago)
- Location:
- LMDZ6/branches/contrails
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/contrails
- Property svn:mergeinfo changed
/LMDZ6/trunk merged: 5654-5683,5685-5690,5692-5715,5718-5721,5726-5727,5729,5744-5761,5763-5778,5780,5785-5789
- Property svn:mergeinfo changed
-
LMDZ6/branches/contrails/libf/misc/readTracFiles_mod.f90
r5641 r5791 1 1 MODULE readTracFiles_mod 2 2 3 USE strings_mod, ONLY: msg, find, get_in, dispTable, strHead, strReduce, strFind, strStack, strIdx, &4 removeComment, cat, fmsg, maxlen, checkList, strParse, strReplace, strTail, strCount, reduceExpr, &5 int2str, str2int, real2str, str2real, bool2str, str2bool3 USE ioipsl_getin_p_mod, ONLY : getin_p 4 USE strings_mod, ONLY: msg, strIdx, dispTable, strHead, strReduce, strFind, strStack, removeComment, num2str, str2real, & 5 reduceExpr, find, cat, maxlen, checkList, strParse, strReplace, strTail, strCount, maxTableWidth, str2int, str2bool 6 6 7 7 IMPLICIT NONE … … 14 14 PUBLIC :: getKeysDBase, setKeysDBase !--- TOOLS TO GET/SET THE DATABASE (tracers & isotopes) 15 15 PUBLIC :: addTracer, delTracer !--- ADD/REMOVE A TRACER FROM 16 PUBLIC :: addKey, delKey, getKey, keys_type !--- TOOLS TO SET/DEL/GET KEYS FROM/TO tracers & isotopes 17 PUBLIC :: addPhase, delPhase, getPhase, getiPhase, & !--- FUNCTIONS RELATED TO THE PHASES 18 nphases, old_phases, phases_sep, known_phases, phases_names !--- + ASSOCIATED VARIABLES 16 PUBLIC :: addKey, delKey, getKey, keys_type !--- TOOLS TO SET/DEL/GET A KEY FROM/TO "tracers" / "isotopes" 17 PUBLIC :: addPhase, delPhase, getPhase, getiPhase !--- TOOLS TO SET/DEL/GET A PHASE FROM/TO A TRACER'S NAME 18 PUBLIC :: old_phases, phases_sep, nphases !--- VARIABLES RELATED TO THE PHASES 19 PUBLIC :: known_phases, phases_names 19 20 20 21 PUBLIC :: oldH2OIso, newH2OIso, old2newH2O, new2oldH2O !--- H2O ISOTOPES BACKWARD COMPATIBILITY (OLD traceur.def) … … 24 25 25 26 !=== FOR ISOTOPES: GENERAL 26 PUBLIC :: isot_type, processIsotopes, isoSelect, ixIso, nbIso !--- PROCESS [AND READ] & SELECT ISOTOPES + CLASS IDX & NUMBER 27 PUBLIC :: isot_type, processIsotopes, isoSelect, isoFamilies !--- ISOTOPES: TYPE, PROCESSING/SELECTION ROUTINES, FAMILIES NAMES 28 PUBLIC :: ixIso, nbIso !--- CURRENTLY SELECTED ISOTOPES FAMILY INDEX, NUMBER OF FAMILIES 27 29 28 30 !=== FOR ISOTOPES: H2O FAMILY ONLY 29 31 PUBLIC :: iH2O 30 32 31 !=== FOR ISOTOPES: DEPENDING ON THE SELECTED ISOTOPES CLASS33 !=== FOR ISOTOPES: DEPENDING ON THE SELECTED ISOTOPES FAMILY 32 34 PUBLIC :: isotope, isoKeys !--- SELECTED ISOTOPES DATABASE + ASSOCIATED KEYS 33 35 PUBLIC :: isoName, isoZone, isoPhas !--- ISOTOPES AND TAGGING ZONES NAMES AND PHASES … … 38 40 PUBLIC :: isoCheck !--- FLAG TO RUN ISOTOPES CHECKING ROUTINES 39 41 40 PUBLIC :: maxTableWidth41 42 !------------------------------------------------------------------------------------------------------------------------------ 42 43 TYPE :: keys_type !=== TYPE FOR A SET OF KEYS ASSOCIATED TO AN ELEMENT … … 141 142 TYPE(isot_type), ALLOCATABLE, TARGET, SAVE :: isotopes(:) 142 143 144 !--- NAMES OF THE ISOTOPES FAMILIES 145 CHARACTER(LEN=maxlen), SAVE, ALLOCATABLE :: isoFamilies(:) 146 143 147 !=== ALIASES OF VARIABLES FROM SELECTED ISOTOPES FAMILY EMBEDDED IN "isotope" (isotopes(ixIso)) 144 148 TYPE(isot_type), SAVE, POINTER :: isotope !--- CURRENTLY SELECTED ISOTOPES FAMILY DESCRIPTOR 145 INTEGER, SAVE :: ixIso, iH2O= 0 !--- Index of the selected isotopes family and H2O family146 INTEGER, SAVE :: nbIso !--- N umber of isotopes classes147 LOGICAL, SAVE :: isoCheck !--- F lag to trigger the checking routines149 INTEGER, SAVE :: ixIso, iH2O=-1 !--- INDEX OF THE SELECTED ISOTOPES FAMILY, H2O FAMILY INDEX 150 INTEGER, SAVE :: nbIso !--- NUMBER OF ISOTOPES FAMILIES 151 LOGICAL, SAVE :: isoCheck !--- FLAG TO TRIGGER THE CHECKING ROUTINES 148 152 TYPE(keys_type), SAVE, POINTER :: isoKeys(:) !--- ONE SET OF KEYS FOR EACH ISOTOPE (LISTED IN isoName) 149 153 CHARACTER(LEN=maxlen), SAVE, POINTER :: isoName(:), & !--- ISOTOPES NAMES FOR THE CURRENTLY SELECTED FAMILY … … 160 164 LOGICAL, PARAMETER :: lSortByGen = .TRUE. !--- Sort by growing generation 161 165 162 INTEGER, PARAMETER :: maxTableWidth = 192 !--- Maximum width of a table displayed with "dispTable"163 166 CHARACTER(LEN=maxlen) :: modname 164 167 … … 220 223 !--- GET THE TRACERS NUMBER 221 224 READ(90,'(i3)',IOSTAT=ierr)ntrac !--- Number of lines/tracers 222 lerr = ierr/=0; IF(fmsg('Invalid format for "'//TRIM(fname)//'"', modname, lerr)) RETURN225 lerr = ierr/=0; CALL msg('Invalid format for "'//TRIM(fname)//'"', modname, lerr); IF(lerr) RETURN 223 226 224 227 !--- READ THE REMAINING LINES: <hadv> <vadv> <tracer> [<transporting fluid>] … … 226 229 DO it = 1, ntrac !=== READ RAW DATA: loop on the line/tracer number 227 230 READ(90,'(a)',IOSTAT=ierr) str 228 lerr = ierr>0; IF(fmsg('Invalid format for "' //TRIM(fname)//'"', modname, lerr)) RETURN229 lerr = ierr<0; IF(fmsg('Not enough lines in "'//TRIM(fname)//'"', modname, lerr)) RETURN231 lerr = ierr>0; CALL msg('Invalid format for "' //TRIM(fname)//'"', modname, lerr); IF(lerr) RETURN 232 lerr = ierr<0; CALL msg('Not enough lines in "'//TRIM(fname)//'"', modname, lerr); IF(lerr) RETURN 230 233 lerr = strParse(str, ' ', s, ns) 231 234 CALL msg('This file is for air tracers only', modname, ns == 3 .AND. it == 1) … … 609 612 jq = strIdx(tname(:), parent(jq)) 610 613 lerr = jq == 0 611 IF(fmsg('Orphan tracer "'//TRIM(tname(iq))//'"', modname, lerr)) RETURN614 CALL msg('Orphan tracer "'//TRIM(tname(iq))//'"', modname, lerr); IF(lerr) RETURN 612 615 ig = ig + 1 613 616 END DO … … 792 795 ! Purpose: Sort tracers: 793 796 ! * Put water at the beginning of the vector, in the "known_phases" order. 794 ! * l GrowGen == T: in ascending generations numbers.795 ! * l GrowGen == F: tracer + its children sorted by growing generation, one after the other.797 ! * lSortByGen == T: in ascending generations numbers. 798 ! * lSortByGen == F: tracer + its children sorted by growing generation, one after the other. 796 799 ! TO BE ADDED IF NECESSARY: HIGHER MOMENTS AT THE END 797 800 !------------------------------------------------------------------------------------------------------------------------------ … … 882 885 lerr = getKey(keys(ik), v1, i1, k1) 883 886 lerr = getKey(keys(ik), v2, i2, k2) 884 lerr = v1 /= v2; IF(fmsg(TRIM(keys(ik))//TRIM(s1), modname, lerr)) RETURN887 lerr = v1 /= v2; CALL msg(TRIM(keys(ik))//TRIM(s1), modname, lerr); IF(lerr) RETURN 885 888 END DO 886 889 … … 993 996 lerr = .FALSE. 994 997 IF(nam(1) == 'iq') THEN 995 tmp2 = int2str([(iq, iq=1, nq)])998 tmp2 = num2str([(iq, iq=1, nq)]) 996 999 tmp = tmp2 997 1000 ELSE … … 1072 1075 iqParent(iq) = strIdx(tnames, parent(iq)) 1073 1076 DO; jq = strIdx(tnames, parent(jq)); IF(jq == 0) EXIT; iGen(iq) = iGen(iq) + 1; END DO 1074 CALL addKey('iqParent', parent(iq), tr(iq)%keys)1077 CALL addKey('iqParent', iqParent(iq), tr(iq)%keys) 1075 1078 CALL addKey('iqGeneration', iGen(iq), tr(iq)%keys) 1076 1079 tr(iq)%iqParent = iqParent(iq) 1080 tr(iq)%iGeneration = iGen(iq) 1077 1081 END DO 1078 1082 … … 1087 1091 tr(iq)%nqChildren = SIZE(iqDescen) 1088 1092 END DO 1089 CALL addKey('iqDescen', strStack( int2str(iqDescen)), tr(iq)%keys)1093 CALL addKey('iqDescen', strStack(num2str(iqDescen)), tr(iq)%keys) 1090 1094 CALL addKey('nqDescen', SIZE(iqDescen), tr(iq)%keys) 1091 1095 tr(iq)%iqDescen = iqDescen … … 1100 1104 !=== READ FILE "fnam" TO APPEND THE "dBase" TRACERS DATABASE WITH AS MUCH SECTIONS AS PARENTS NAMES IN "isot(:)%parent": ==== 1101 1105 !=== * Each section dBase(i)%name contains the isotopes "dBase(i)%trac(:)" descending on "dBase(i)%name"="iso(i)%parent" ==== 1102 !=== * For each isotopes class, the <key>=<val> vector of each tracer is moved into the isotopes descriptor "isot"====1106 !=== * For each isotopes family, the <key>=<val> vector of each tracer is moved into the isotopes descriptor "isot" ==== 1103 1107 !=== NOTES: ==== 1104 1108 !=== * Most of the "isot" components have been defined in the calling routine (processIsotopes): ==== … … 1123 1127 !--- THE INPUT FILE MUST BE PRESENT 1124 1128 INQUIRE(FILE=TRIM(fnam), EXIST=lFound); lerr = .NOT.lFound 1125 IF(fmsg('Missing isotopes parameters file "'//TRIM(fnam)//'"', modname, lerr)) RETURN1126 1127 !--- READ THE FILE SECTIONS, ONE EACH PARENT TRACER1129 CALL msg('Missing isotopes parameters file "'//TRIM(fnam)//'"', modname, lerr); IF(lerr) RETURN 1130 1131 !--- READ THE FILE SECTIONS, ONE EACH ISOTOPES FAMILY 1128 1132 nb0 = SIZE(dBase, DIM=1)+1 !--- Next database element index 1129 lerr = readSections(fnam,strStack(isot(:)%parent,'|')); IF(lerr) RETURN !--- Read sections, one each parent tracer1133 lerr = readSections(fnam,strStack(isot(:)%parent,'|')); IF(lerr) RETURN !--- Read sections, one each isotopes family 1130 1134 ndb = SIZE(dBase, DIM=1) !--- Current database size 1131 1135 DO idb = nb0, ndb … … 1133 1137 1134 1138 !--- GET FEW GLOBAL KEYS FROM "def" FILES AND ADD THEM TO THE 'params' SECTION 1135 CALL addKeysFromDef(dBase(idb)%trac, 'params')1139 ! CALL addKeysFromDef(dBase(idb)%trac, 'params') 1136 1140 1137 1141 !--- SUBSTITUTE THE KEYS DEFINED IN THE 'params' VIRTUAL TRACER ; SUBSTITUTE LOCAL KEYS ; REMOVE 'params' VIRTUAL TRACER … … 1163 1167 END IF 1164 1168 1165 !--- GET THE isoCheck ENTRY FROM THE *.DEF FILES (MIGHT BE CHANGED TO A CLASS-DEPENDANT KEYWORD)1166 CALL get_in('ok_iso_verif', isot(strIdx(isot%parent, 'H2O'))%check, .FALSE.)1167 1168 1169 lerr = dispIsotopes() 1169 1170 … … 1176 1177 CHARACTER(LEN=maxlen), ALLOCATABLE :: ttl(:), val(:,:) 1177 1178 CALL msg('Isotopes parameters read from file "'//TRIM(fnam)//'":', modname) 1178 DO ip = 1, SIZE(isot) !--- Loop on parents tracers1179 DO ip = 1, SIZE(isot) !--- Loop on isotopes families 1179 1180 nk = SIZE(isot(ip)%keys(1)%key) !--- Same keys for each isotope 1180 1181 nt = SIZE(isot(ip)%keys) !--- Number of isotopes … … 1189 1190 END DO 1190 1191 lerr = dispTable(prf, ttl, val, cat([(it,it=1,nt)]), rFmt='(EN8.4)', nColMax=maxTableWidth, nHead=2, sub=modname) 1191 IF(fmsg('Problem with the table content', modname, lerr)) RETURN1192 CALL msg('Problem with the table content', modname, lerr); IF(lerr) RETURN 1192 1193 DEALLOCATE(ttl, val) 1193 1194 END DO … … 1230 1231 lerr = getKey('iGeneration', iGen, t%keys); IF(lerr) RETURN !--- Generation number 1231 1232 1232 !--- GET FROM "tracers" THE FULL LIST OF AVAILABLE ISOTOPES CLASSES1233 !--- GET FROM "tracers" THE FULL LIST OF AVAILABLE ISOTOPES FAMILIES 1233 1234 p = PACK(delPhase(parent), MASK = dType=='tracer' .AND. iGen==1) 1234 1235 CALL strReduce(p, nbIso) 1235 1236 1236 !--- CHECK WHETHER NEEDED ISOTOPES CLASSES "iNames" ARE AVAILABLE OR NOT1237 !--- CHECK WHETHER NEEDED ISOTOPES FAMILIES "iNames" ARE AVAILABLE OR NOT 1237 1238 IF(PRESENT(iNames)) THEN 1238 1239 DO it = 1, SIZE(iNames) 1239 1240 lerr = ALL(p /= iNames(it)) 1240 IF(fmsg('No isotopes class "'//TRIM(iNames(it))//'" found among tracers', modname, lerr)) RETURN1241 CALL msg('No isotopes family "'//TRIM(iNames(it))//'" found among tracers', modname, lerr); IF(lerr) RETURN 1241 1242 END DO 1242 1243 p = iNames; nbIso = SIZE(p) 1243 1244 END IF 1244 1245 IF(ALLOCATED(isotopes)) DEALLOCATE(isotopes) 1245 ALLOCATE(isotopes(nbIso) )1246 ALLOCATE(isotopes(nbIso), isoFamilies(nbIso)) 1246 1247 1247 1248 IF(nbIso==0) RETURN !=== NO ISOTOPES: FINISHED … … 1249 1250 !--- ISOTOPES RELATED VARIABLES ; NULL OR EMPTY IF NO ISOTOPES 1250 1251 isotopes(:)%parent = p 1251 DO ic = 1, SIZE(p) !--- Loop on isotopes classes1252 DO ic = 1, SIZE(p) !--- Loop on isotopes families 1252 1253 i => isotopes(ic) 1253 iname = i%parent !--- Current isotopes classname (parent tracer name)1254 iname = i%parent !--- Current isotopes family name (parent tracer name) 1254 1255 1255 1256 !=== Isotopes children of tracer "iname": mask, names, number (same for each phase of "iname") … … 1308 1309 1309 1310 !--- GET THE isoCheck ENTRY FROM THE *.DEF FILES (MIGHT BE CHANGED TO A CLASS-DEPENDANT KEYWORD) 1310 CALL get _in('ok_iso_verif', isoCheck, .TRUE.)1311 CALL getin_p('ok_iso_verif', isoCheck, .TRUE.) 1311 1312 1312 1313 !=== CHECK CONSISTENCY … … 1315 1316 !=== SELECT WATER ISOTOPES CLASS OR, IF UNFOUND, THE FIRST ISOTOPES CLASS 1316 1317 IF(.NOT.isoSelect('H2O', .TRUE.)) THEN; iH2O = ixIso; ELSE; lerr = isoSelect(1, .TRUE.); END IF 1318 1319 !=== COLLECT THE NAMES OF THE ISOTOPES FAMILIES 1320 isoFamilies = isotopes(:)%parent 1317 1321 1318 1322 CONTAINS … … 1329 1333 np = SUM([(COUNT(tracers(:)%name == addPhase(i%trac(it), i%phase(ip:ip))), ip=1, npha)]) 1330 1334 lerr = np /= npha 1331 CALL msg(TRIM( int2str(np))//' phases instead of '//TRIM(int2str(npha))//' for '//TRIM(i%trac(it)), modname, lerr)1335 CALL msg(TRIM(num2str(np))//' phases instead of '//TRIM(num2str(npha))//' for '//TRIM(i%trac(it)), modname, lerr) 1332 1336 IF(lerr) RETURN 1333 1337 END DO … … 1335 1339 nz = SUM([(COUNT(i%trac == TRIM(i%trac(it))//'_'//i%zone(iz)), iz=1, nzon)]) 1336 1340 lerr = nz /= nzon 1337 CALL msg(TRIM( int2str(nz))//' tagging zones instead of '//TRIM(int2str(nzon))//' for '//TRIM(i%trac(it)), modname, lerr)1341 CALL msg(TRIM(num2str(nz))//' tagging zones instead of '//TRIM(num2str(nzon))//' for '//TRIM(i%trac(it)), modname, lerr) 1338 1342 IF(lerr) RETURN 1339 1343 END DO … … 1348 1352 !============================================================================================================================== 1349 1353 !=== THE ROUTINE isoSelect IS USED TO SWITCH FROM AN ISOTOPE FAMILY TO ANOTHER: ISOTOPES DEPENDENT PARAMETERS ARE UPDATED 1350 ! Single generic "isoSelect" routine, using the predefined index of the parent(fast version) or its name (first call).1354 ! Single generic "isoSelect" routine, using the predefined index of the family (fast version) or its name (first call). 1351 1355 !============================================================================================================================== 1352 1356 LOGICAL FUNCTION isoSelectByName(iName, lVerbose) RESULT(lerr) … … 1376 1380 IF(iIso == ixIso) RETURN !--- Nothing to do if the index is already OK 1377 1381 lerr = iIso<=0 .OR. iIso>SIZE(isotopes) 1378 CALL msg('Inconsistent isotopes family index '//TRIM( int2str(iIso))//': should be > 0 and <= '&1379 //TRIM( int2str(SIZE(isotopes)))//'"', ll = lerr .AND. lV)1382 CALL msg('Inconsistent isotopes family index '//TRIM(num2str(iIso))//': should be > 0 and <= '& 1383 //TRIM(num2str(SIZE(isotopes)))//'"', ll = lerr .AND. lV) 1380 1384 IF(lerr) RETURN 1381 1385 ixIso = iIso !--- Update currently selected family index … … 1425 1429 LOGICAL, OPTIONAL, INTENT(IN) :: lOverWrite 1426 1430 !------------------------------------------------------------------------------------------------------------------------------ 1427 CALL addKey_s11(key, int2str(ival), ky, lOverWrite)1431 CALL addKey_s11(key, num2str(ival), ky, lOverWrite) 1428 1432 END SUBROUTINE addKey_i11 1429 1433 !============================================================================================================================== … … 1434 1438 LOGICAL, OPTIONAL, INTENT(IN) :: lOverWrite 1435 1439 !------------------------------------------------------------------------------------------------------------------------------ 1436 CALL addKey_s11(key, real2str(rval), ky, lOverWrite)1440 CALL addKey_s11(key, num2str(rval), ky, lOverWrite) 1437 1441 END SUBROUTINE addKey_r11 1438 1442 !============================================================================================================================== … … 1443 1447 LOGICAL, OPTIONAL, INTENT(IN) :: lOverWrite 1444 1448 !------------------------------------------------------------------------------------------------------------------------------ 1445 CALL addKey_s11(key, bool2str(lval), ky, lOverWrite)1449 CALL addKey_s11(key, num2str(lval), ky, lOverWrite) 1446 1450 END SUBROUTINE addKey_l11 1447 1451 !============================================================================================================================== … … 1463 1467 !------------------------------------------------------------------------------------------------------------------------------ 1464 1468 INTEGER :: itr 1465 DO itr = 1, SIZE(ky); CALL addKey_s11(key, int2str(ival), ky(itr), lOverWrite); END DO1469 DO itr = 1, SIZE(ky); CALL addKey_s11(key, num2str(ival), ky(itr), lOverWrite); END DO 1466 1470 END SUBROUTINE addKey_i1m 1467 1471 !============================================================================================================================== … … 1473 1477 !------------------------------------------------------------------------------------------------------------------------------ 1474 1478 INTEGER :: itr 1475 DO itr = 1, SIZE(ky); CALL addKey_s11(key, real2str(rval), ky(itr), lOverWrite); END DO1479 DO itr = 1, SIZE(ky); CALL addKey_s11(key, num2str(rval), ky(itr), lOverWrite); END DO 1476 1480 END SUBROUTINE addKey_r1m 1477 1481 !============================================================================================================================== … … 1483 1487 !------------------------------------------------------------------------------------------------------------------------------ 1484 1488 INTEGER :: itr 1485 DO itr = 1, SIZE(ky); CALL addKey_s11(key, bool2str(lval), ky(itr), lOverWrite); END DO1489 DO itr = 1, SIZE(ky); CALL addKey_s11(key, num2str(lval), ky(itr), lOverWrite); END DO 1486 1490 END SUBROUTINE addKey_l1m 1487 1491 !============================================================================================================================== … … 1503 1507 !------------------------------------------------------------------------------------------------------------------------------ 1504 1508 INTEGER :: itr 1505 DO itr = 1, SIZE(ky); CALL addKey_s11(key, int2str(ival(itr)), ky(itr), lOverWrite); END DO1509 DO itr = 1, SIZE(ky); CALL addKey_s11(key, num2str(ival(itr)), ky(itr), lOverWrite); END DO 1506 1510 END SUBROUTINE addKey_imm 1507 1511 !============================================================================================================================== … … 1513 1517 !------------------------------------------------------------------------------------------------------------------------------ 1514 1518 INTEGER :: itr 1515 DO itr = 1, SIZE(ky); CALL addKey_s11(key, real2str(rval(itr)), ky(itr), lOverWrite); END DO1519 DO itr = 1, SIZE(ky); CALL addKey_s11(key, num2str(rval(itr)), ky(itr), lOverWrite); END DO 1516 1520 END SUBROUTINE addKey_rmm 1517 1521 !============================================================================================================================== … … 1523 1527 !------------------------------------------------------------------------------------------------------------------------------ 1524 1528 INTEGER :: itr 1525 DO itr = 1, SIZE(ky); CALL addKey_s11(key, bool2str(lval(itr)), ky(itr), lOverWrite); END DO1529 DO itr = 1, SIZE(ky); CALL addKey_s11(key, num2str(lval(itr)), ky(itr), lOverWrite); END DO 1526 1530 END SUBROUTINE addKey_lmm 1527 1531 !============================================================================================================================== … … 1531 1535 !=== OVERWRITE THE KEYS OF THE TRACER NAMED "tr0" WITH THE VALUES FOUND IN THE *.def FILES, IF ANY. =========================== 1532 1536 !============================================================================================================================== 1533 SUBROUTINE addKeysFromDef(t, tr0)1534 TYPE(trac_type), ALLOCATABLE, INTENT(INOUT) :: t(:)1535 CHARACTER(LEN=*), INTENT(IN) :: tr01536 !------------------------------------------------------------------------------------------------------------------------------ 1537 CHARACTER(LEN=maxlen) :: val1538 INTEGER :: ik, jd1539 jd = strIdx(t%name, tr0)1540 IF(jd == 0) RETURN1541 DO ik = 1, SIZE(t(jd)%keys%key)1542 CALL get_in(t(jd)%keys%key(ik), val, '*none*')1543 IF(val /= '*none*') CALL addKey(t(jd)%keys%key(ik), val, t(jd)%keys, .TRUE.)1544 END DO1545 END SUBROUTINE addKeysFromDef1537 !SUBROUTINE addKeysFromDef(t, tr0) 1538 ! TYPE(trac_type), ALLOCATABLE, INTENT(INOUT) :: t(:) 1539 ! CHARACTER(LEN=*), INTENT(IN) :: tr0 1540 !------------------------------------------------------------------------------------------------------------------------------ 1541 ! CHARACTER(LEN=maxlen) :: val 1542 ! INTEGER :: ik, jd 1543 ! jd = strIdx(t%name, tr0) 1544 ! IF(jd == 0) RETURN 1545 ! DO ik = 1, SIZE(t(jd)%keys%key) 1546 ! CALL getin_p(t(jd)%keys%key(ik), val, '*none*') 1547 ! IF(val /= '*none*') CALL addKey(t(jd)%keys%key(ik), val, t(jd)%keys, .TRUE.) 1548 ! END DO 1549 !END SUBROUTINE addKeysFromDef 1546 1550 !============================================================================================================================== 1547 1551 … … 1677 1681 LOGICAL :: lD 1678 1682 lD = .TRUE.; IF(PRESENT(lDisp)) lD = lDisp 1679 s = 'key "'//TRIM(strStack(keyn, '/'))//'" for tracer nr. '//TRIM( int2str(itr))1683 s = 'key "'//TRIM(strStack(keyn, '/'))//'" for tracer nr. '//TRIM(num2str(itr)) 1680 1684 lerr = .TRUE. 1681 1685 IF(lerr .AND. PRESENT(ky)) val = fgetKey(ky) !--- "ky" … … 1707 1711 !------------------------------------------------------------------------------------------------------------------------------ 1708 1712 CHARACTER(LEN=maxlen) :: sval, s 1709 IF( PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, int2str(def), lDisp)1713 IF( PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, num2str(def), lDisp) 1710 1714 IF(.NOT.PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, lDisp=lDisp) 1711 1715 IF(lerr) RETURN 1712 1716 val = str2int(sval) 1713 1717 lerr = val == -HUGE(1) 1714 s = 'key "'//TRIM(strStack(keyn, '/'))//'" of tracer nr. '//TRIM( int2str(itr))//' is not'1718 s = 'key "'//TRIM(strStack(keyn, '/'))//'" of tracer nr. '//TRIM(num2str(itr))//' is not' 1715 1719 CALL msg(TRIM(s)//' an integer: '//TRIM(sval), modname, lerr) 1716 1720 END FUNCTION getKeyByIndex_im11 … … 1725 1729 !------------------------------------------------------------------------------------------------------------------------------ 1726 1730 CHARACTER(LEN=maxlen) :: sval, s 1727 IF( PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, real2str(def), lDisp)1731 IF( PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, num2str(def), lDisp) 1728 1732 IF(.NOT.PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, lDisp=lDisp) 1729 1733 IF(lerr) RETURN 1730 1734 val = str2real(sval) 1731 1735 lerr = val == -HUGE(1.) 1732 s = 'key "'//TRIM(strStack(keyn, '/'))//'" of tracer nr. '//TRIM( int2str(itr))//' is not'1736 s = 'key "'//TRIM(strStack(keyn, '/'))//'" of tracer nr. '//TRIM(num2str(itr))//' is not' 1733 1737 CALL msg(TRIM(s)//' a real: '//TRIM(sval), modname, lerr) 1734 1738 END FUNCTION getKeyByIndex_rm11 … … 1744 1748 CHARACTER(LEN=maxlen) :: sval, s 1745 1749 INTEGER :: ival 1746 IF( PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, bool2str(def), lDisp)1750 IF( PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, num2str(def), lDisp) 1747 1751 IF(.NOT.PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, lDisp=lDisp) 1748 1752 IF(lerr) RETURN 1749 1753 ival = str2bool(sval) 1750 1754 lerr = ival == -1 1751 s = 'key "'//TRIM(strStack(keyn, '/'))//'" of tracer nr. '//TRIM( int2str(itr))//' is not'1755 s = 'key "'//TRIM(strStack(keyn, '/'))//'" of tracer nr. '//TRIM(num2str(itr))//' is not' 1752 1756 CALL msg(TRIM(s)//' a boolean: '//TRIM(sval), modname, lerr) 1753 1757 IF(.NOT.lerr) val = ival == 1 … … 1766 1770 lerr = getKeyByIndex_sm11([keyn], sval, itr, ky, def, lDisp); IF(lerr) RETURN 1767 1771 lerr = strParse(sval, ',', val) 1768 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN1772 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 1769 1773 END FUNCTION getKeyByIndex_s1m1 1770 1774 !============================================================================================================================== … … 1779 1783 CHARACTER(LEN=maxlen) :: sval, s 1780 1784 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:) 1781 IF( PRESENT(def)) lerr = getKeyByIndex_sm11([keyn], sval, itr, ky, int2str(def), lDisp)1785 IF( PRESENT(def)) lerr = getKeyByIndex_sm11([keyn], sval, itr, ky, num2str(def), lDisp) 1782 1786 IF(.NOT.PRESENT(def)) lerr = getKeyByIndex_sm11([keyn], sval, itr, ky, lDisp=lDisp) 1783 1787 IF(lerr) RETURN 1784 1788 lerr = strParse(sval, ',', svals) 1785 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN1789 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 1786 1790 val = str2int(svals) 1787 1791 lerr = ANY(val == -HUGE(1)) 1788 s = 'key "'//TRIM(keyn)//'" of tracer nr. '//TRIM( int2str(itr))//' is not'1792 s = 'key "'//TRIM(keyn)//'" of tracer nr. '//TRIM(num2str(itr))//' is not' 1789 1793 CALL msg(TRIM(s)//' an integer: '//TRIM(sval), modname, lerr) 1790 1794 END FUNCTION getKeyByIndex_i1m1 … … 1800 1804 CHARACTER(LEN=maxlen) :: sval, s 1801 1805 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:) 1802 IF( PRESENT(def)) lerr = getKeyByIndex_sm11([keyn], sval, itr, ky, real2str(def), lDisp)1806 IF( PRESENT(def)) lerr = getKeyByIndex_sm11([keyn], sval, itr, ky, num2str(def), lDisp) 1803 1807 IF(.NOT.PRESENT(def)) lerr = getKeyByIndex_sm11([keyn], sval, itr, ky, lDisp=lDisp) 1804 1808 lerr = strParse(sval, ',', svals) 1805 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN1809 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 1806 1810 val = str2real(svals) 1807 1811 lerr = ANY(val == -HUGE(1.)) 1808 s = 'key "'//TRIM(keyn)//'" of tracer nr. '//TRIM( int2str(itr))//' is not'1812 s = 'key "'//TRIM(keyn)//'" of tracer nr. '//TRIM(num2str(itr))//' is not' 1809 1813 CALL msg(TRIM(s)//' a real: '//TRIM(sval), modname, lerr) 1810 1814 END FUNCTION getKeyByIndex_r1m1 … … 1821 1825 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:) 1822 1826 INTEGER, ALLOCATABLE :: ivals(:) 1823 IF( PRESENT(def)) lerr = getKeyByIndex_sm11([keyn], sval, itr, ky, bool2str(def), lDisp)1827 IF( PRESENT(def)) lerr = getKeyByIndex_sm11([keyn], sval, itr, ky, num2str(def), lDisp) 1824 1828 IF(.NOT.PRESENT(def)) lerr = getKeyByIndex_sm11([keyn], sval, itr, ky, lDisp=lDisp) 1825 1829 lerr = strParse(sval, ',', svals) 1826 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN1830 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 1827 1831 ivals = str2bool(svals) 1828 1832 lerr = ANY(ivals == -1) 1829 s = 'key "'//TRIM(keyn)//'" of tracer nr. '//TRIM( int2str(itr))//' is not'1833 s = 'key "'//TRIM(keyn)//'" of tracer nr. '//TRIM(num2str(itr))//' is not' 1830 1834 CALL msg(TRIM(s)//' a boolean: '//TRIM(sval), modname, lerr) 1831 1835 IF(.NOT.lerr) val = ivals == 1 … … 1844 1848 lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, def, lDisp); IF(lerr) RETURN 1845 1849 lerr = strParse(sval, ',', val) 1846 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN1850 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 1847 1851 END FUNCTION getKeyByIndex_smm1 1848 1852 !============================================================================================================================== … … 1857 1861 CHARACTER(LEN=maxlen) :: sval, s 1858 1862 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:) 1859 IF( PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, int2str(def), lDisp)1863 IF( PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, num2str(def), lDisp) 1860 1864 IF(.NOT.PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, lDisp=lDisp) 1861 1865 IF(lerr) RETURN 1862 1866 lerr = strParse(sval, ',', svals) 1863 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN1867 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 1864 1868 val = str2int(svals) 1865 1869 lerr = ANY(val == -HUGE(1)) 1866 s = 'key "'//TRIM(strStack(keyn, '/'))//'" of tracer nr. '//TRIM( int2str(itr))//' is not'1870 s = 'key "'//TRIM(strStack(keyn, '/'))//'" of tracer nr. '//TRIM(num2str(itr))//' is not' 1867 1871 CALL msg(TRIM(s)//' an integer: '//TRIM(sval), modname, lerr) 1868 1872 END FUNCTION getKeyByIndex_imm1 … … 1878 1882 CHARACTER(LEN=maxlen) :: sval, s 1879 1883 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:) 1880 IF( PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, real2str(def), lDisp)1884 IF( PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, num2str(def), lDisp) 1881 1885 IF(.NOT.PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, lDisp=lDisp) 1882 1886 IF(lerr) RETURN 1883 1887 lerr = strParse(sval, ',', svals) 1884 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN1888 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 1885 1889 val = str2real(svals) 1886 1890 lerr = ANY(val == -HUGE(1.)) 1887 s = 'key "'//TRIM(strStack(keyn, '/'))//'" of tracer nr. '//TRIM( int2str(itr))//' is not'1891 s = 'key "'//TRIM(strStack(keyn, '/'))//'" of tracer nr. '//TRIM(num2str(itr))//' is not' 1888 1892 CALL msg(TRIM(s)//' a real: '//TRIM(sval), modname, lerr) 1889 1893 END FUNCTION getKeyByIndex_rmm1 … … 1900 1904 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:) 1901 1905 INTEGER, ALLOCATABLE :: ivals(:) 1902 IF( PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, bool2str(def), lDisp)1906 IF( PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, num2str(def), lDisp) 1903 1907 IF(.NOT.PRESENT(def)) lerr = getKeyByIndex_sm11(keyn, sval, itr, ky, lDisp=lDisp) 1904 1908 IF(lerr) RETURN 1905 1909 lerr = strParse(sval, ',', svals) 1906 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN1910 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 1907 1911 ivals = str2bool(svals) 1908 1912 lerr = ANY(ivals == -1) 1909 s = 'key "'//TRIM(strStack(keyn, '/'))//'" of tracer nr. '//TRIM( int2str(itr))//' is not'1913 s = 'key "'//TRIM(strStack(keyn, '/'))//'" of tracer nr. '//TRIM(num2str(itr))//' is not' 1910 1914 CALL msg(TRIM(s)//' a boolean: '//TRIM(sval), modname, lerr) 1911 1915 IF(.NOT.lerr) val = ivals == 1 … … 2012 2016 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:), tname(:) 2013 2017 LOGICAL, ALLOCATABLE :: ll(:) 2014 IF( PRESENT(def)) lerr = getKeyByIndex_smmm(keyn, svals, ky, tname, int2str(def), lDisp)2018 IF( PRESENT(def)) lerr = getKeyByIndex_smmm(keyn, svals, ky, tname, num2str(def), lDisp) 2015 2019 IF(.NOT.PRESENT(def)) lerr = getKeyByIndex_smmm(keyn, svals, ky, tname, lDisp=lDisp) 2016 2020 IF(lerr) RETURN … … 2034 2038 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:), tname(:) 2035 2039 LOGICAL, ALLOCATABLE :: ll(:) 2036 IF( PRESENT(def)) lerr = getKeyByIndex_smmm(keyn, svals, ky, tname, real2str(def), lDisp)2040 IF( PRESENT(def)) lerr = getKeyByIndex_smmm(keyn, svals, ky, tname, num2str(def), lDisp) 2037 2041 IF(.NOT.PRESENT(def)) lerr = getKeyByIndex_smmm(keyn, svals, ky, tname, lDisp=lDisp) 2038 2042 IF(lerr) RETURN … … 2056 2060 LOGICAL, ALLOCATABLE :: ll(:) 2057 2061 INTEGER, ALLOCATABLE :: ivals(:) 2058 IF( PRESENT(def)) lerr = getKeyByIndex_smmm(keyn, svals, ky, tname, bool2str(def), lDisp)2062 IF( PRESENT(def)) lerr = getKeyByIndex_smmm(keyn, svals, ky, tname, num2str(def), lDisp) 2059 2063 IF(.NOT.PRESENT(def)) lerr = getKeyByIndex_smmm(keyn, svals, ky, tname, lDisp=lDisp) 2060 2064 IF(lerr) RETURN … … 2165 2169 !------------------------------------------------------------------------------------------------------------------------------ 2166 2170 CHARACTER(LEN=maxlen) :: sval, s 2167 IF( PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, int2str(def), lDisp)2171 IF( PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, num2str(def), lDisp) 2168 2172 IF(.NOT.PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, lDisp=lDisp) 2169 2173 IF(lerr) RETURN … … 2182 2186 !------------------------------------------------------------------------------------------------------------------------------ 2183 2187 CHARACTER(LEN=maxlen) :: sval, s 2184 IF( PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, real2str(def), lDisp)2188 IF( PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, num2str(def), lDisp) 2185 2189 IF(.NOT.PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, lDisp=lDisp) 2186 2190 IF(lerr) RETURN … … 2200 2204 CHARACTER(LEN=maxlen) :: sval, s 2201 2205 INTEGER :: ival 2202 IF( PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, bool2str(def), lDisp)2206 IF( PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, num2str(def), lDisp) 2203 2207 IF(.NOT.PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, lDisp=lDisp) 2204 2208 IF(lerr) RETURN … … 2221 2225 lerr = getKeyByName_sm11([keyn], sval, tname, ky, def, lDisp); IF(lerr) RETURN 2222 2226 lerr = strParse(sval, ',', val) 2223 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN2227 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 2224 2228 END FUNCTION getKeyByName_s1m1 2225 2229 !============================================================================================================================== … … 2233 2237 CHARACTER(LEN=maxlen) :: sval, s 2234 2238 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:) 2235 IF( PRESENT(def)) lerr = getKeyByName_sm11([keyn], sval, tname, ky, int2str(def), lDisp)2239 IF( PRESENT(def)) lerr = getKeyByName_sm11([keyn], sval, tname, ky, num2str(def), lDisp) 2236 2240 IF(.NOT.PRESENT(def)) lerr = getKeyByName_sm11([keyn], sval, tname, ky, lDisp=lDisp) 2237 2241 IF(lerr) RETURN 2238 2242 lerr = strParse(sval, ',', svals) 2239 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN2243 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 2240 2244 val = str2int(svals) 2241 2245 lerr = ANY(val == -HUGE(1)) … … 2253 2257 CHARACTER(LEN=maxlen) :: sval, s 2254 2258 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:) 2255 IF( PRESENT(def)) lerr = getKeyByName_sm11([keyn], sval, tname, ky, real2str(def), lDisp)2259 IF( PRESENT(def)) lerr = getKeyByName_sm11([keyn], sval, tname, ky, num2str(def), lDisp) 2256 2260 IF(.NOT.PRESENT(def)) lerr = getKeyByName_sm11([keyn], sval, tname, ky, lDisp=lDisp) 2257 2261 IF(lerr) RETURN 2258 2262 lerr = strParse(sval, ',', svals) 2259 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN2263 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 2260 2264 val = str2real(svals) 2261 2265 lerr = ANY(val == -HUGE(1.)) … … 2274 2278 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:) 2275 2279 INTEGER, ALLOCATABLE :: ivals(:) 2276 IF( PRESENT(def)) lerr = getKeyByName_sm11([keyn], sval, tname, ky, bool2str(def), lDisp)2280 IF( PRESENT(def)) lerr = getKeyByName_sm11([keyn], sval, tname, ky, num2str(def), lDisp) 2277 2281 IF(.NOT.PRESENT(def)) lerr = getKeyByName_sm11([keyn], sval, tname, ky, lDisp=lDisp) 2278 2282 IF(lerr) RETURN 2279 2283 lerr = strParse(sval, ',', svals) 2280 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN2284 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 2281 2285 ivals = str2bool(svals) 2282 2286 lerr = ANY(ivals == -1) … … 2297 2301 lerr = getKeyByName_sm11(keyn, sval, tname, ky, def, lDisp); IF(lerr) RETURN 2298 2302 lerr = strParse(sval, ',', val) 2299 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN2303 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 2300 2304 END FUNCTION getKeyByName_smm1 2301 2305 !============================================================================================================================== … … 2309 2313 CHARACTER(LEN=maxlen) :: sval, s 2310 2314 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:) 2311 IF( PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, int2str(def), lDisp)2315 IF( PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, num2str(def), lDisp) 2312 2316 IF(.NOT.PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, lDisp=lDisp) 2313 2317 IF(lerr) RETURN 2314 2318 lerr = strParse(sval, ',', svals) 2315 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN2319 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 2316 2320 val = str2int(svals) 2317 2321 lerr = ANY(val == -HUGE(1)) … … 2329 2333 CHARACTER(LEN=maxlen) :: sval, s 2330 2334 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:) 2331 IF( PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, real2str(def), lDisp)2335 IF( PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, num2str(def), lDisp) 2332 2336 IF(.NOT.PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, lDisp=lDisp) 2333 2337 IF(lerr) RETURN 2334 2338 lerr = strParse(sval, ',', svals) 2335 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN2339 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 2336 2340 val = str2real(svals) 2337 2341 lerr = ANY(val == -HUGE(1.)) … … 2350 2354 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:) 2351 2355 INTEGER, ALLOCATABLE :: ivals(:) 2352 IF( PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, bool2str(def), lDisp)2356 IF( PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, num2str(def), lDisp) 2353 2357 IF(.NOT.PRESENT(def)) lerr = getKeyByName_sm11(keyn, sval, tname, ky, lDisp=lDisp) 2354 2358 IF(lerr) RETURN 2355 2359 lerr = strParse(sval, ',', svals) 2356 IF(fmsg('can''t parse '//TRIM(sval), modname, lerr)) RETURN2360 CALL msg('can''t parse '//TRIM(sval), modname, lerr); IF(lerr) RETURN 2357 2361 ivals = str2bool(svals) 2358 2362 lerr = ANY(ivals == -1) … … 2448 2452 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:) 2449 2453 LOGICAL, ALLOCATABLE :: ll(:) 2450 IF( PRESENT(def)) lerr = getKeyByName_smmm(keyn, svals, tname, ky, int2str(def), lDisp)2454 IF( PRESENT(def)) lerr = getKeyByName_smmm(keyn, svals, tname, ky, num2str(def), lDisp) 2451 2455 IF(.NOT.PRESENT(def)) lerr = getKeyByName_smmm(keyn, svals, tname, ky, lDisp=lDisp) 2452 2456 IF(lerr) RETURN … … 2468 2472 CHARACTER(LEN=maxlen), ALLOCATABLE :: svals(:) 2469 2473 LOGICAL, ALLOCATABLE :: ll(:) 2470 IF( PRESENT(def)) lerr = getKeyByName_smmm(keyn, svals, tname, ky, real2str(def), lDisp)2474 IF( PRESENT(def)) lerr = getKeyByName_smmm(keyn, svals, tname, ky, num2str(def), lDisp) 2471 2475 IF(.NOT.PRESENT(def)) lerr = getKeyByName_smmm(keyn, svals, tname, ky, lDisp=lDisp) 2472 2476 IF(lerr) RETURN … … 2489 2493 LOGICAL, ALLOCATABLE :: ll(:) 2490 2494 INTEGER, ALLOCATABLE :: ivals(:) 2491 IF( PRESENT(def)) lerr = getKeyByName_smmm(keyn, svals, tname, ky, bool2str(def), lDisp)2495 IF( PRESENT(def)) lerr = getKeyByName_smmm(keyn, svals, tname, ky, num2str(def), lDisp) 2492 2496 IF(.NOT.PRESENT(def)) lerr = getKeyByName_smmm(keyn, svals, tname, ky, lDisp=lDisp) 2493 2497 IF(lerr) RETURN … … 2647 2651 INTEGER :: nt, ix 2648 2652 lerr = .NOT.ALLOCATED(tracs) 2649 IF(fmsg('Can''t remove tracer "'//TRIM(tname)//'" from an empty tracers descriptor', modname, lerr)) RETURN2653 CALL msg('Can''t remove tracer "'//TRIM(tname)//'" from an empty tracers descriptor', modname, lerr); IF(lerr) RETURN 2650 2654 nt = SIZE(tracs) 2651 2655 lerr = getKey('name', tnames, ky=tracs(:)%keys); IF(lerr) RETURN
Note: See TracChangeset
for help on using the changeset viewer.