DEFINITION MODULE MWGParamsIO;
(*******************************************************************
Module MWGParamsIO (Version 1.0)
Copyright (c) 1996-2006 by Dimitrios Gyalistras and ETH Zurich.
Purpose File input/output of parameters needed for
stochastic simulation of monthly weather
variables.
Remarks Files syntax:
MWGParamFile = ParamBlock {ParamBlock}.
ParamBlock = PBlockHeader VarSpecif {VarSpecif} MatSpecif.
PBlockHeader = "#" siteID "N_VARS" numVars "MAX_ITERS" maxIters.
VarSpecif = (SimpleVarSp | LogNTrfVarSp).
SimpleVarSp = VarID "MU" "SIG" "R_MIN" "R_MAX"
SimpleVarData {SimpleVarData}.
LogNTrfVarSp = VarID "MU" "SIG" "LN_MU" "LN_SIG" "LN_THETA"
"R_MIN" "R_MAX" LogNTrfVarData {LogNTrfVarData}.
SimpleVarData = monthNr mu sig rangeMin rangeMax.
LogNTrfVarData = monthNr mu sig lnMu lnSig lnTheta rangeMin rangeMax.
MatSpecif = [MatrixA] MatrixB.
MatrixA = "A_MATRIX" MatElementID {MatElementID} MatData.
MatrixB = "B_MATRIX" MatElementID {MatElementID} MatData.
MatElementID = IDENTIFIER.
MatData = monthNr matElement {matElement}.
siteID = LONGINT.
numVars = INTEGER.
maxIters = INTEGER.
VarID = IDENTIFIER.
monthNr = INTEGER.
mu, sig = LONGREAL.
rangeMin = LONGREAL.
rangeMax = LONGREAL.
lnMu, lnSig = LONGREAL.
lnTheta = LONGREAL.
matElement = LONGREAL.
Within a "ParamBlock" expected are exactly 12 "SimpleVarData" and/or
"LogNTrfVarData" entries per Variable, and 12 "MatData" entries per A-
oder B-Matrix, one for each month, respectively. The "MatElementIDs" of
a "MatrixA" or a "MatrixB" must start with "A" and "B", respectively.
For each matrix and month in total exactly numVars "MatElementIDs" and
numVars^2 "matElements" are expected.
This module is part of the package MonWeathGen.
Programming
o Design
Dimitrios Gyalistras 08/12/1996
o Implementation
Dimitrios Gyalistras 08/12/1996
ETH Zurich
Systems Ecology
CHN E 35.1
Universitaetstrasse 16
8092 Zurich
SWITZERLAND
URLs:
<mailto:RAMSES@env.ethz.ch>
<http://www.sysecol.ethz.ch>
<http://www.sysecol.ethz.ch/SimSoftware/RAMSES>
Last revision of definition: 14/06/2000 DG
*******************************************************************)
IMPORT Errors;
FROM DMFiles IMPORT
TextFile;
FROM MonWeathGen IMPORT
MaxMWGVars, MWGLRealVecArr, MWGLnTrfTVecArr, MWGLMatrixArr;
CONST (* result codes returned *)
allOk = Errors.allOk;
notDone = Errors.onlyAnInsert;
TYPE
VariableID = ARRAY [1..64] OF CHAR;
VariableIDArr = ARRAY [1..MaxMWGVars] OF VariableID;
(*****************************************************************************)
PROCEDURE WriteMWGParams( VAR outFile : TextFile;
paramBlockID : LONGINT;
nDecDigsVecs : INTEGER;
nDecDigsMats : INTEGER;
nVars : INTEGER;
VAR varID : VariableIDArr; (* VAR for speed-up only *)
VAR mu : MWGLRealVecArr; (* VAR for speed-up only *)
VAR sig : MWGLRealVecArr; (* VAR for speed-up only *)
VAR lnTrfType : MWGLnTrfTVecArr; (* VAR for speed-up only *)
VAR lnTrfMu : MWGLRealVecArr; (* VAR for speed-up only *)
VAR lnTrfSig : MWGLRealVecArr; (* VAR for speed-up only *)
VAR lnTrfTheta : MWGLRealVecArr; (* VAR for speed-up only *)
VAR A, B : MWGLMatrixArr; (* VAR for speed-up only *)
VAR allowedMin : MWGLRealVecArr; (* VAR for speed-up only *)
VAR allowedMax : MWGLRealVecArr; (* VAR for speed-up only *)
maxIters : INTEGER;
VAR resCode : INTEGER;
VAR errTxt : ARRAY OF CHAR );
PROCEDURE RetrieveMWGParams( fName : ARRAY OF CHAR;
paramBlockID : LONGINT;
VAR nVars : INTEGER;
VAR varID : VariableIDArr;
VAR mu : MWGLRealVecArr;
VAR sig : MWGLRealVecArr;
VAR lnTrfType : MWGLnTrfTVecArr;
VAR lnTrfMu : MWGLRealVecArr;
VAR lnTrfSig : MWGLRealVecArr;
VAR lnTrfTheta : MWGLRealVecArr;
VAR A, B : MWGLMatrixArr;
VAR allowedMin : MWGLRealVecArr;
VAR allowedMax : MWGLRealVecArr;
VAR maxIters : INTEGER;
VAR resCode : INTEGER;
VAR errTxt : ARRAY OF CHAR );
(* NOTE: all LMatrix objects in A and B are first de-allocated and then
re-allocated. Usage of MonWeathGen.ResetMWGLMatrixArr prior to calling
this procedure for the first time is recommended. *)
END MWGParamsIO.