constant true:
  type : boolean()

constant false:
  type : boolean()

function min:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (arrayType(metavar integer, dimColons()),
         metavar integer1, 
         arrayType(metavar integer, dimColons()))
  inline :
function
modifiers
endOfList
arrayType
metavar
integer
dimColons
endOfList
none
metavar
min
varDeclarations
varDeclaration
none
arrayType
metavar
integer
dimColons
endOfList
declarators
metavar
x
endOfList
varDeclaration
none
metavar
integer1
declarators
metavar
y
endOfList
endOfList
blockStatement
implicit
endOfList
where
gt
metavar
x
metavar
y
blockStatement
assign
metavar
min
metavar
y
endOfList
blockStatement
assign
metavar
min
metavar
x
endOfList
none
endOfList

function min:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar integer1, 
         arrayType(metavar integer, dimColons()),
         arrayType(metavar integer, dimColons()))
  inline :
function
modifiers
endOfList
arrayType
metavar
integer
dimColons
endOfList
none
metavar
min
varDeclarations
varDeclaration
none
metavar
integer1
declarators
metavar
x
endOfList
varDeclaration
none
arrayType
metavar
integer
dimColons
endOfList
declarators
metavar
y
endOfList
endOfList
blockStatement
implicit
endOfList
where
gt
metavar
x
metavar
y
blockStatement
assign
metavar
min
metavar
y
endOfList
blockStatement
assign
metavar
min
metavar
x
endOfList
none
endOfList

function min:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (arrayType(metavar integer, dimColons()),
         arrayType(metavar integer, dimColons()),
         arrayType(metavar integer, dimColons()))
  inline :
function
modifiers
endOfList
arrayType
metavar
integer
dimColons
endOfList
none
metavar
min
varDeclarations
varDeclaration
none
arrayType
metavar
integer
dimColons
endOfList
declarators
metavar
x
metavar
y
endOfList
endOfList
blockStatement
implicit
endOfList
where
gt
metavar
x
metavar
y
blockStatement
assign
metavar
min
metavar
y
endOfList
blockStatement
assign
metavar
min
metavar
x
endOfList
none
endOfList

function min0:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar integer, metavar integer, metavar integer)
  inline :
function
modifiers
endOfList
metavar
integer
none
metavar
min0
varDeclarations
varDeclaration
none
metavar
integer
declarators
metavar
x
metavar
y
endOfList
endOfList
blockStatement
implicit
endOfList
if
gt
metavar
x
metavar
y
blockStatement
assign
metavar
min0
metavar
y
endOfList
blockStatement
assign
metavar
min0
metavar
x
endOfList
endOfList

function amin1:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar real, metavar real, metavar real)
  inline :
function
modifiers
endOfList
metavar
real
none
metavar
amin1
varDeclarations
varDeclaration
none
metavar
real
declarators
metavar
x
metavar
y
endOfList
endOfList
blockStatement
implicit
endOfList
if
gt
metavar
x
metavar
y
blockStatement
assign
metavar
amin1
metavar
y
endOfList
blockStatement
assign
metavar
amin1
metavar
x
endOfList
endOfList

function dmin1:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar real, metavar real, metavar real)
  inline :
function
modifiers
endOfList
metavar
real
none
metavar
dmin1
varDeclarations
varDeclaration
none
metavar
real
declarators
metavar
x
metavar
y
endOfList
endOfList
blockStatement
implicit
endOfList
if
gt
metavar
x
metavar
y
blockStatement
assign
metavar
dmin1
metavar
y
endOfList
blockStatement
assign
metavar
dmin1
metavar
x
endOfList
endOfList

function max:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (arrayType(metavar integer, dimColons()),
         metavar integer1,
         arrayType(metavar integer, dimColons()))
  inline :
function
modifiers
endOfList
arrayType
metavar
integer
dimColons
endOfList
none
metavar
max
varDeclarations
varDeclaration
none
arrayType
metavar
integer
dimColons
endOfList
declarators
metavar
x
endOfList
varDeclaration
none
metavar
integer1
declarators
metavar
y
endOfList
endOfList
blockStatement
implicit
endOfList
where
lt
metavar
x
metavar
y
blockStatement
assign
metavar
max
metavar
y
endOfList
blockStatement
assign
metavar
max
metavar
x
endOfList
none
endOfList

function max:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar integer1,
         arrayType(metavar integer, dimColons()),
         arrayType(metavar integer, dimColons()))
  inline :
function
modifiers
endOfList
arrayType
metavar
integer
dimColons
endOfList
none
metavar
max
varDeclarations
varDeclaration
none
metavar
integer1
declarators
metavar
x
endOfList
varDeclaration
none
arrayType
metavar
integer
dimColons
endOfList
declarators
metavar
y
endOfList
endOfList
blockStatement
implicit
endOfList
where
lt
metavar
x
metavar
y
blockStatement
assign
metavar
max
metavar
y
endOfList
blockStatement
assign
metavar
max
metavar
x
endOfList
none
endOfList

function max:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (arrayType(metavar integer, dimColons()),
         arrayType(metavar integer, dimColons()),
         arrayType(metavar integer, dimColons()))
  inline :
function
modifiers
endOfList
arrayType
metavar
integer
dimColons
endOfList
none
metavar
max
varDeclarations
varDeclaration
none
arrayType
metavar
integer
dimColons
endOfList
declarators
metavar
x
metavar
y
endOfList
endOfList
blockStatement
implicit
endOfList
where
lt
metavar
x
metavar
y
blockStatement
assign
metavar
max
metavar
y
endOfList
blockStatement
assign
metavar
max
metavar
x
endOfList
none
endOfList

function max0:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar integer, metavar integer, metavar integer)
  inline :
function
modifiers
endOfList
metavar
integer
none
metavar
max0
varDeclarations
varDeclaration
none
metavar
integer
declarators
metavar
x
metavar
y
endOfList
endOfList
blockStatement
implicit
endOfList
if
lt
metavar
x
metavar
y
blockStatement
assign
metavar
max0
metavar
y
endOfList
blockStatement
assign
metavar
max0
metavar
x
endOfList
endOfList

function amax1:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar real, metavar real, metavar real)
  inline :
function
modifiers
endOfList
metavar
real
none
metavar
amax1
varDeclarations
varDeclaration
none
metavar
real
declarators
metavar
x
metavar
y
endOfList
endOfList
blockStatement
implicit
endOfList
if
lt
metavar
x
metavar
y
blockStatement
assign
metavar
amax1
metavar
y
endOfList
blockStatement
assign
metavar
amax1
metavar
x
endOfList
endOfList

function dmax1:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar real, metavar real, metavar real)
  inline :
function
modifiers
endOfList
metavar
real
none
metavar
dmax1
varDeclarations
varDeclaration
none
metavar
real
declarators
metavar
x
metavar
y
endOfList
endOfList
blockStatement
implicit
endOfList
if
lt
metavar
x
metavar
y
blockStatement
assign
metavar
dmax1
metavar
y
endOfList
blockStatement
assign
metavar
dmax1
metavar
x
endOfList
endOfList

function abs:
  intrinsic:
  shape: (param 1, result)
  type: (arrayType(metavar integer, dimColons()),
         arrayType(metavar integer, dimColons()))
  inline :
function
modifiers
endOfList
arrayType
metavar
integer
dimColons
endOfList
none
metavar
abs
varDeclarations
varDeclaration
none
arrayType
metavar
integer
dimColons
endOfList
declarators
metavar
x
endOfList
endOfList
blockStatement
implicit
endOfList
where
ge
metavar
x
realCst
0.0
blockStatement
assign
metavar
abs
metavar
x
endOfList
blockStatement
assign
metavar
abs
minus
metavar
x
endOfList
none
endOfList

function dabs:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  inline:
function
modifiers
endOfList
modifiedType
modifiers
ident
double
endOfList
float
none
metavar
dabs
varDeclarations
varDeclaration
none
modifiedType
modifiers
ident
double
endOfList
float
declarators
metavar
x
endOfList
endOfList
blockStatement
implicit
endOfList
if
ge
metavar
x
realCst
0.
blockStatement
assign
metavar
dabs
metavar
x
endOfList
blockStatement
assign
metavar
dabs
minus
metavar
x
endOfList
endOfList

function dabs:
  intrinsic:
  shape: (param 1, result)
  type: (arrayType(modifiedType(modifiers(ident double), float()),
                   dimColons()),
	 arrayType(modifiedType(modifiers(ident double), float()),
                   dimColons()))
  inline:
function
modifiers
endOfList
arrayType
modifiedType
modifiers
ident
double
endOfList
float
dimColons
endOfList
none
metavar
dabs
varDeclarations
varDeclaration
none
arrayType
modifiedType
modifiers
ident
double
endOfList
float
dimColons
endOfList
declarators
metavar
x
endOfList
endOfList
blockStatement
implicit
endOfList
where
ge
metavar
x
realCst
0.
blockStatement
assign
metavar
dabs
metavar
x
endOfList
blockStatement
assign
metavar
dabs
minus
metavar
x
endOfList
none
endOfList

function iabs:
  intrinsic:
  shape: (param 1, result)
  type: (integer(), integer())
  inline:
function
modifiers
endOfList
integer
none
ident
iabs
varDeclarations
varDeclaration
none
integer
declarators
metavar
x
endOfList
endOfList
blockStatement
if
ge
metavar
x
intCst
0
blockStatement
assign
metavar
iabs
metavar
x
endOfList
blockStatement
assign
metavar
iabs
minus
metavar
x
endOfList
endOfList

function sin:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident sin, expressions(metavar X)),
                      none(),
                      expressions(binary(metavar X, none(), call(none(), ident cos, expressions(metavar X)))))
  
function dsin:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dsin, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), call(none(), ident dcos, expressions(metavar X)))))

function sinh:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident sinh, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), call(none(), ident cosh, expressions(metavar X)))))

function dsinh:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dsinh, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), call(none(), ident dcosh, expressions(metavar X)))))

function cos:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident cos, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), minus(call(none(), ident sin, expressions(metavar X))))))

function dcos:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dcos, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), minus(call(none(), ident dsin, expressions(metavar X))))))

function cosh:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident cosh, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), call(none(), ident sinh, expressions(metavar X)))))

function dcosh:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dcosh, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), call(none(), ident dsinh, expressions(metavar X)))))

function tan:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident tan, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
                          add(realCst 1.0, power(call(none(), ident tan, expressions(metavar X)), intCst 2)))))

function dtan:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dtan, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
                          add(realCst 1.D0, power(call(none(), ident dtan, expressions(metavar X)), intCst 2)))))

function tanh:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident tanh, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
               sub(realCst 1.0,power(call(none(), ident tanh, expressions(metavar X)), intCst 2)))))

function dtanh:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dtanh, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
               sub(realCst 1.D0,power(call(none(), ident tanh, expressions(metavar X)), intCst 2)))))

function asin:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident asin, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
		          div(realCst 1.0, call(none(), ident sqrt, expressions(sub(realCst 1.0, power(metavar X, intCst 2))))))))

function dasin:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dasin, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
		          div(realCst 1.D0, call(none(), ident sqrt, expressions(sub(realCst 1.D0, power(metavar X, intCst 2))))))))

function asinh:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident asinh, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
       		          div(realCst 1.0, call(none(), ident sqrt, expressions(add(realCst 1.0, power(metavar X, intCst 2))))))))

function dasinh:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dasinh, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
       		          div(realCst 1.D0, call(none(), ident sqrt, expressions(add(realCst 1.D0, power(metavar X, intCst 2))))))))

function acos:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident acos, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
		          div(realCst -1.0, call(none(), ident sqrt, expressions(sub(realCst 1.0, power(metavar X, intCst 2))))))))

function dacos:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dacos, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
		          div(realCst -1.D0, call(none(), ident sqrt, expressions(sub(realCst 1.D0, power(metavar X, intCst 2))))))))

function acosh:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident acosh, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
       		          div(realCst 1.0, call(none(), ident sqrt, expressions(sub(power(metavar X, intCst 2), realCst 1.0)))))))

function dacosh:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dacosh, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
       		          div(realCst 1.D0, call(none(), ident sqrt, expressions(sub(power(metavar X, intCst 2), realCst 1.D0)))))))

function atan:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident atan, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
		          div(realCst 1.0, add(realCst 1.0, power(metavar X, intCst 2))))))

function datan:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident datan, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
		          div(realCst 1.D0, add(realCst 1.D0, power(metavar X, intCst 2))))))

function atanh:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident atanh, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
		          div(realCst 1.0, sub(realCst 1.0, power(metavar X, intCst 2))))))

function datanh:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident datanh, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
		          div(realCst 1.D0, sub(realCst 1.D0, power(metavar X, intCst 2))))))
 
function log:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident log, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), div(realCst 1.0, metavar X))))

function dlog:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dlog, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), div(realCst 1.D0, metavar X))))

function alog:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident alog, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), div(realCst 1.0, metavar X))))

function log10:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident log10, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), div(realCst 1.0, mul(metavar X, call(none(), ident log, expressions(realCst 10.0)))))))

function dlog10:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dlog10, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), div(realCst 1.D0, mul(metavar X, call(none(), ident dlog, expressions(realCst 10.D0)))))))

function alog10:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident alog10, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), div(realCst 1.0, mul(metavar X, call(none(), ident alog, expressions(realCst 10.0)))))))

function nint:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, integer())
  derivative : binary(call(none(), ident nint, expressions(metavar X)),
       none(),
       expressions())

function floor:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, integer())

function exp:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident exp, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), call(none(), ident exp, expressions(metavar X)))))

function dexp:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dexp, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), call(none(), ident dexp, expressions(metavar X)))))

function sqrt:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, metavar real)
  derivative : binary(call(none(), ident sqrt, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
                          div(realCst 1.0, mul(realCst 2.0, metavar TOP_EXPRESSION)))))

function csqrt:
  intrinsic:
  shape: (param 1, result)
  type: (complex(), complex())
  derivative : binary(call(none(), ident csqrt, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
                          div(realCst 1.0, mul(realCst 2.0, metavar TOP_EXPRESSION)))))

function dsqrt:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dsqrt, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
        		  div(realCst 1.D0, mul(realCst 2.D0, call(none(), ident dsqrt, expressions(metavar X)))))))

function dsqrt:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(nameEq(ident kind,intCst 8)), float()),
	 modifiedType(modifiers(nameEq(ident kind,intCst 8)), float()))
  derivative : binary(call(none(), ident dsqrt, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
        		  div(realCst 1.D0, mul(realCst 2.D0, call(none(), ident dsqrt, expressions(metavar X)))))))


function atan2:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar real, metavar real, metavar real)
  derivative : binary(call(none(), ident atan2, expressions(metavar X, metavar Y)),
       div(realCst 1.0, add(power(metavar X, intCst 2), power(metavar Y, intCst 2))),
       expressions(binary(metavar X, none(), metavar Y),
		   binary(metavar Y, none(), minus(metavar X))))

function datan2:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident datan2, expressions(metavar X, metavar Y)),
       div(realCst 1.D0, add(power(metavar X, intCst 2), power(metavar Y, intCst 2))),
       expressions(binary(metavar X, none(), metavar Y),
		   binary(metavar Y, none(), minus(metavar X))))

function complex:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar real,
	 metavar real,
	 complex())
  derivative : binary(call(none(), ident complex, expressions(metavar X, metavar Y)),
       none(),
       expressions(binary(metavar X, none(),
	                  call(none(), ident complex, expressions(realCst 1.0, realCst 0.0))),
                   binary(metavar Y, none(),
	                  call(none(), ident complex, expressions(realCst 0.0, realCst 1.0)))))

function cmplx:
  intrinsic:
  shape: (param 1, result)
  type: (metavar complex, complex())
  derivative : binary(call(none(), ident cmplx, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
	                  call(none(), ident cmplx, expressions(realCst 1.0, realCst 0.0)))
                   ))

function cmplx:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar real,
	 metavar real,
	 complex())
  derivative : binary(call(none(), ident cmplx, expressions(metavar X, metavar Y)),
       none(),
       expressions(binary(metavar X, none(),
	                  call(none(), ident cmplx, expressions(realCst 1.0, realCst 0.0))),
                   binary(metavar Y, none(),
	                  call(none(), ident cmplx, expressions(realCst 0.0, realCst 1.0)))))

function cmplx:
  intrinsic:
  shape: (param 1, param 2, param 3, result)
  type: (metavar real,
	 metavar real,
	 none(),
	 complex())
  derivative : binary(call(none(), ident cmplx, expressions(metavar X, metavar Y, metavar K)),
       none(),
       expressions(binary(metavar X, none(),
	                  call(none(), ident cmplx, expressions(realCst 1.0, realCst 0.0, metavar K))),
                   binary(metavar Y, none(),
	                  call(none(), ident cmplx, expressions(realCst 0.0, realCst 1.0, metavar K)))))

function dcmplx:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), metavar complex),
	 modifiedType(modifiers(ident double), metavar complex))
  derivative : binary(call(none(), ident dcmplx, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(),
	                  call(none(), ident dcmplx, expressions(realCst 1.0, realCst 0.0)))
                   ))

function dcmplx:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (modifiedType(modifiers(ident double), metavar real),
	 modifiedType(modifiers(ident double), metavar real),
	 modifiedType(modifiers(ident double), complex()))
  derivative : binary(call(none(), ident dcmplx, expressions(metavar X, metavar Y)),
       none(),
       expressions(binary(metavar X, none(),
	                  call(none(), ident dcmplx, expressions(realCst 1.0, realCst 0.0))),
                   binary(metavar Y, none(),
	                  call(none(), ident dcmplx, expressions(realCst 0.0, realCst 1.0)))))

function dcmplx:
  intrinsic:
  shape: (param 1, param 2, param 3, result)
  type: (modifiedType(modifiers(ident double), metavar real),
	 modifiedType(modifiers(ident double), metavar real),
	 none(),
	 modifiedType(modifiers(ident double), complex()))
  derivative : binary(call(none(), ident dcmplx, expressions(metavar X, metavar Y, metavar K)),
       none(),
       expressions(binary(metavar X, none(),
	                  call(none(), ident dcmplx, expressions(realCst 1.0, realCst 0.0, metavar K))),
                   binary(metavar Y, none(),
	                  call(none(), ident dcmplx, expressions(realCst 0.0, realCst 1.0, metavar K)))))

function conjg:
  intrinsic:
  shape: (param 1, result)
  type: (metavar complex, metavar complex)
  derivative : binary(call(none(), ident conjg, expressions(metavar X)),
       none(),
       expressions())

function dconjg:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), complex()), modifiedType(modifiers(ident double), complex()))
  derivative : binary(call(none(), ident dconjg, expressions(metavar X)),
       none(),
       expressions())

function real:
  intrinsic:
  shape: (param 1, result)
  type: (metavar type, float())
  derivative : binary(call(none(), ident real, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), realCst 1.D0)))

function real:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar type, none(), float())
  derivative : binary(call(none(), ident real, expressions(metavar X, metavar K)),
       none(),
       expressions(binary(metavar X, none(), realCst 1.D0)))

function dreal:
  intrinsic:
  shape: (param 1, result)
  type: (metavar type, modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dreal, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), realCst 1.D0)))

function aimag:
  intrinsic:
  shape: (param 1, result)
  type: (metavar type, float())
  derivative : binary(call(none(), ident aimag, expressions(metavar X)),
       none(),
       expressions())

function dimag:
  intrinsic:
  shape: (param 1, result)
  type: (metavar type, modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dimag, expressions(metavar X)),
       none(),
       expressions())

function any:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (arrayType(boolean(), dimColons(dimColon(none(), none()))), integer(), boolean())

function any:
  intrinsic:
  shape: (param 1, result)
  type: (arrayType(boolean(), dimColons(dimColon(none(), none()))), boolean())

function maxval:
  intrinsic:
  shape: (param 1, result)
  type: (arrayType(metavar real, dimColons()),
         metavar real)

function maxval:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (arrayType(metavar real, dimColons()),
         none(),
         metavar real)

function minval:
  intrinsic:
  shape: (param 1, result)
  type: (arrayType(metavar real, dimColons()),
         metavar real)

function minval:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (arrayType(metavar real, dimColons()),
         none(),
         metavar real)

function maxloc:
  intrinsic:
  shape: (param 1, result)
  type: (arrayType(metavar real, dimColons()),
         arrayType(integer(), dimColons(dimColon(none(),none()))))

function minloc:
  intrinsic:
  shape: (param 1, result)
  type: (arrayType(metavar real, dimColons()),
         arrayType(integer(), dimColons(dimColon(none(),none()))))

function dprod:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dprod, expressions(metavar X, metavar Y)),
       none(),
       expressions(binary(metavar X, none(), metavar Y),
		   binary(metavar Y, none(), metavar X)))

function len:
  intrinsic:
  shape: (param 1, result)
  type: (arrayType(character(), dimColons()),
         integer())
  derivative :  binary(call(none(), ident len, expressions(metavar X)),
       none(),
       expressions())

function char:
  intrinsic:
  shape: (param 1, result)
  type: (integer(), character())

function int:
  intrinsic:
  shape: (param 1, result)
  type: (metavar real, integer())
  derivative : binary(call(none(), ident int, expressions(metavar X)),
       none(),
       expressions())

function aint:
  intrinsic:
  shape: (param 1, result)
  type: (float(), integer())
  derivative : binary(call(none(), ident aint, expressions(metavar X)),
       none(),
       expressions())

function index:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (arrayType(character(), dimColons(dimColon(none(), none()))),
	 arrayType(character(), dimColons(dimColon(none(), none()))),
	 integer())
  derivative : binary(call(none(), ident index, expressions(metavar X, metavar Y)),
       none(),
       expressions())

function concat:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (arrayType(character(), dimColons(dimColon(none(), none()))),
	 arrayType(character(), dimColons(dimColon(none(), none()))),
         arrayType(character(), dimColons(dimColon(none(), none()))))

function sign:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar real, metavar real, metavar real)
  deps : (id,
          id,
          1,0,0)
  derivative : binary(call(none(), ident sign, expressions(metavar X, metavar Y)),
       none(),
       expressions(binary(metavar X, none(),
                          call(none(), ident sign, expressions(realCst 1.d0,
                               mul(metavar X, metavar Y))))))

function dsign:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  deps : (id,
          id,
          1,0,0)
  derivative : binary(call(none(), ident dsign, expressions(metavar X, metavar Y)),
       none(),
       expressions(binary(metavar X, none(),
                          call(none(), ident dsign, expressions(realCst 1.d0,
                               mul(metavar X, metavar Y))))))

function isign:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (integer(), integer(), integer())

function mod:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar integer, metavar integer, metavar integer)
  derivative : binary(call(none(), ident mod, expressions(metavar X, metavar Y)),
       none(),
       expressions(binary(metavar X, none(), realCst 1.D0),
                   binary(metavar Y, none(), minus(call(none(), ident int,
                                                        expressions(div(metavar X, metavar Y)))))))

function float:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(intCst 8), float()),
	 modifiedType(modifiers(intCst 8), float()))
  derivative : binary(call(none(), ident float, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), realCst 1.0)))

function dfloat:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dfloat, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), realCst 1.0)))

function dble:
  intrinsic:
  shape: (param 1, result)
  type: (float(),
	 modifiedType(modifiers(ident double), float()))
  derivative : binary(call(none(), ident dble, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), realCst 1.D0)))

function sngl:
  intrinsic:
  shape: (param 1, result)
  type: (modifiedType(modifiers(ident double), float()),
	 float())
  derivative : binary(call(none(), ident sngl, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), realCst 1.D0)))

function ichar:
  intrinsic:
  shape: (param 1, result)
  type: (character(),integer())

subroutine date_and_time:
  intrinsic:
  shape: (param 1)
  type: (metavar type)
  ReadThenWritten:   (0)
  ReadNotWritten:    (0)
  NotReadThenWritten:(1)

subroutine date_and_time:
  intrinsic:
  shape: (param 1, param 2)
  type: (metavar type, metavar type)
  ReadThenWritten:   (0, 0)
  ReadNotWritten:    (0, 0)
  NotReadThenWritten:(1, 1)

subroutine date_and_time:
  intrinsic:
  shape: (param 1, param 2, param 3)
  type: (metavar type, metavar type, metavar type)
  ReadThenWritten:   (0, 0, 0)
  ReadNotWritten:    (0, 0, 0)
  NotReadThenWritten:(1, 1, 1)

subroutine date_and_time:
  intrinsic:
  shape: (param 1, param 2, param 3, param 4)
  type: (metavar type, metavar type, metavar type, metavar type)
  ReadThenWritten:   (0, 0, 0, 0)
  ReadNotWritten:    (0, 0, 0, 0)
  NotReadThenWritten:(1, 1, 1, 1)

function etime:
  intrinsic:
  shape: (param 1, result)
  type: (arrayType(float(), dimColons()), float())

function lbound:
  intrinsic:
  shape: (param 1, 
          result)
  type:  (arrayType(metavar type,dimColons()),
          integer())

function lbound:
  intrinsic:
  shape: (param 1, 
          param 2,
          result)
  type:  (arrayType(metavar type,dimColons()),
          integer(),
          integer())

function ubound:
  intrinsic:
  shape: (param 1, 
          result)
  type:  (arrayType(metavar type, dimColons()),
          integer())

function ubound:
  intrinsic:
  shape: (param 1, 
          param 2, 
          result)
  type:  (arrayType(metavar type, dimColons()),
          integer(),
          integer())

function len_trim:
  intrinsic:
  shape: (param 1, result)
  type: (arrayType(character(), dimColons()), integer())

function sum:
  intrinsic:
  shape: (param 1, result)
  type: (arrayType(metavar real,dimColons()),
         metavar real)
  derivative : binary(call(none(), ident sum, expressions(metavar X)),
       none(),
       expressions(binary(metavar X, none(), realCst 1.0)))

function sum:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (arrayType(metavar real,dimColons()),
         none(),
         metavar real)
  derivative : binary(call(none(), ident sum, 
               expressions(metavar X, metavar DIM_OR_MASK)),
       none(),
       expressions(binary(metavar X, none(), realCst 1.0)))

function sum:
  intrinsic:
  shape: (param 1, param 2, param 3, result)
  type: (arrayType(metavar real,dimColons()),
         none(), none(),
         metavar real)
  derivative : binary(call(none(), ident sum, 
               expressions(metavar X, metavar DIM, metavar MASK)),
       none(),
       expressions(binary(metavar X, none(), realCst 1.0)))

function selected_int_kind:
  intrinsic:
  shape: (param 1, result)
  type: (metavar integer, metavar integer)

function selected_real_kind:
  intrinsic:
  shape: (param 1, result)
  type: (metavar integer, metavar integer)

function selected_int_kind:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar integer, metavar integer, metavar integer)

function selected_real_kind:
  intrinsic:
  shape: (param 1, param 2, result)
  type: (metavar integer, metavar integer, metavar integer)

function kind:
  intrinsic:
  shape: (param 1, result)
  type:  (metavar type, integer())

subroutine system_clock:
  intrinsic:
  shape: (param 1)
  type:  (float())
  NotReadNotWritten: (0)
  ReadThenWritten:   (0)
  ReadNotWritten:    (0)
  NotReadThenWritten:(1)
  derivative:  binary(call(none(), ident system_clock, expressions(metavar X)),
       none(),
       expressions())

function %val:
  intrinsic:
  shape:(param 1, result)
  type : (integer(), integer())

function abs:
  intrinsic:
  shape: (param 1, result)
  type: (complex(), float())
  inline :
function
modifiers
endOfList
float
none
metavar
abs
varDeclarations
varDeclaration
none
complex
declarators
metavar
z
endOfList
endOfList
blockStatement
implicit
endOfList
assign
metavar
abs
call
none
ident
sqrt
expressions
add
power
call
none
ident
real
expressions
metavar
z
endOfList
intCst
2
power
call
none
ident
aimag
expressions
metavar
z
endOfList
intCst
2
endOfList
endOfList

function abs:
  intrinsic:
  shape: (param 1, result)
  type: (arrayType(complex(), dimColons()),
         arrayType(float(), dimColons()))
  inline :
function
modifiers
endOfList
arrayType
float
dimColons
endOfList
none
metavar
abs
varDeclarations
varDeclaration
none
arrayType
complex
dimColons
endOfList
declarators
metavar
z
endOfList
endOfList
blockStatement
implicit
endOfList
assign
metavar
abs
call
none
ident
sqrt
expressions
add
power
call
none
ident
real
expressions
metavar
z
endOfList
intCst
2
power
call
none
ident
aimag
expressions
metavar
z
endOfList
intCst
2
endOfList
endOfList

subroutine mpi_send:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0)

subroutine ampi_send:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 0, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0)

subroutine mpi_send:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 1, 1, 1, 0, 0)
  NotReadThenWritten: (0, 0, 0, 0, 0, 0, 1, 1)
  deps : (id,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,0)
          
subroutine ampi_send:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 1, 1, 1, 1, 0, 0)
  NotReadThenWritten: (0, 0, 0, 0, 0, 0, 0, 1, 1)
  deps : (id,
          id,
          id,
          id,
          id,
          id,
          id,  
          0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,0,0)

subroutine mpi_send:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), arrayType(integer(), dimColons()), integer())
  ReadNotWritten:     (1, 1, 1, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 0, 0, 0, 1, 1)
  deps : (id,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,0)

subroutine ampi_send:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), integer(), arrayType(integer(), dimColons()), integer())
  ReadNotWritten:     (1, 1, 1, 1, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 0, 0, 0, 0, 1, 1)
  deps : (id,
          id,
          id,
          id,
          id,
          id,
          id, 
          0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,0,0)

subroutine mpi_isend:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0)

subroutine ampi_isend:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 0, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0)

subroutine mpi_isend:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 1, 1, 1, 0, 0)
  NotReadThenWritten: (0, 0, 0, 0, 0, 0, 1, 1)
  deps : (id,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,0)

subroutine ampi_isend:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 1, 1, 1, 1, 0, 0)
  NotReadThenWritten: (0, 0, 0, 0, 0, 0, 0, 1, 1)
  deps : (id,
          id,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,0,
          0,0,0,0,0,0,0,0,0)
          
subroutine mpi_recv:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (0, 1, 1, 1, 1, 1, 0, 0)
  NotReadThenWritten: (1, 0, 0, 0, 0, 0, 1, 1)
  deps : (0,0,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0)

subroutine ampi_recv:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (0, 1, 1, 1, 1, 1, 1, 0, 0)
  NotReadThenWritten: (1, 0, 0, 0, 0, 0, 0, 1, 1)
  deps : (0,0,0,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,0)

subroutine mpi_recv:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), arrayType(integer(), dimColons()), integer())
  ReadNotWritten:     (0, 1, 1, 1, 1, 1, 0, 0)
  NotReadThenWritten: (1, 0, 0, 0, 0, 0, 1, 1)
  deps : (0,0,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0)

subroutine ampi_recv:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), integer(), arrayType(integer(), dimColons()), integer())
  ReadNotWritten:     (0, 1, 1, 1, 1, 1, 1, 0, 0)
  NotReadThenWritten: (1, 0, 0, 0, 0, 0, 0, 1, 1)
  deps : (0,0,0,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,0)

subroutine mpi_irecv:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (0, 1, 1, 1, 1, 1, 1, 0)
  NotReadThenWritten: (1, 0, 0, 0, 0, 0, 0, 1)
  deps : (0,0,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0)
          
subroutine ampi_irecv:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (0, 1, 1, 1, 1, 1, 1, 1, 0)
  NotReadThenWritten: (1, 0, 0, 0, 0, 0, 0, 0, 1)
  deps : (0,0,0,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,0)

subroutine mpi_reduce:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8)
  type:  (metavar arg, metavar arg, integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 1, 0, 0, 0, 0, 0, 1)
  deps : (id,
          1,1,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0)

subroutine ampi_reduce:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8)
  type:  (metavar arg, metavar arg, integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 1, 0, 0, 0, 0, 0, 1)
  deps : (id,
          1,1,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0)

subroutine mpi_init:
  external:
  shape: (param 1)
  type:  (integer())
  ReadNotWritten:     (0)
  NotReadThenWritten: (1)

subroutine ampi_init:
  external:
  shape: (param 1)
  type:  (integer())
  ReadNotWritten:     (0)
  NotReadThenWritten: (1)

subroutine mpi_finalize:
  external:
  shape: (param 1)
  type:  (integer())
  ReadNotWritten:     (0)
  NotReadThenWritten: (1)

subroutine ampi_finalize:
  external:
  shape: (param 1)
  type:  (integer())
  ReadNotWritten:     (0)
  NotReadThenWritten: (1)

subroutine mpi_comm_size:
  external:
  shape: (param 1, param 2, param 3)
  type:  (integer(), integer(), integer())
  ReadNotWritten:     (1, 0, 0)
  NotReadThenWritten: (0, 1, 1)

subroutine ampi_comm_size:
  external:
  shape: (param 1, param 2, param 3)
  type:  (integer(), integer(), integer())
  ReadNotWritten:     (1, 0, 0)
  NotReadThenWritten: (0, 1, 1)

subroutine mpi_comm_rank:
  external:
  shape: (param 1, param 2, param 3)
  type:  (integer(), integer(), integer())
  ReadNotWritten:     (1, 0, 0)
  NotReadThenWritten: (0, 1, 1)

subroutine ampi_comm_rank:
  external:
  shape: (param 1, param 2, param 3)
  type:  (integer(), integer(), integer())
  ReadNotWritten:     (1, 0, 0)
  NotReadThenWritten: (0, 1, 1)

subroutine mpi_wait:
  external:
  shape: (param 1, param 2, param 3)
  type:  (integer(), arrayType(integer(), dimColons()), integer())
  ReadNotWritten:     (0, 0, 0)
  NotReadThenWritten: (0, 1, 1)
  ReadThenWritten:    (1, 0, 0)

subroutine ampi_wait:
  external:
  shape: (param 1, param 2, param 3)
  type:  (integer(), arrayType(integer(), dimColons()), integer())
  ReadNotWritten:     (0, 0, 0)
  NotReadThenWritten: (0, 1, 1)
  ReadThenWritten:    (1, 0, 0)

subroutine mpi_waitany:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5)
  type:  (integer(), arrayType(integer(), dimColons()), integer(), arrayType(integer(), dimColons()), integer())
  ReadNotWritten:     (1, 0, 0, 0, 0)
  NotReadThenWritten: (0, 0, 1, 1, 1)
  ReadThenWritten:    (0, 1, 0, 0, 0)

subroutine mpi_test:
  external:
  shape: (param 1, param 2, param 3, param 4)
  type:  (integer(), boolean(), arrayType(integer(), dimColons()), integer())
  ReadNotWritten:     (0, 0, 0, 0)
  NotReadThenWritten: (0, 1, 1, 1)
  ReadThenWritten:    (1, 0, 0, 0)

subroutine mpi_get_count:
  external:
  shape: (param 1, param 2, param 3, param 4)
  type:  (arrayType(integer(), dimColons()), integer(), integer(), integer())
  ReadNotWritten:     (1, 0, 0, 0)
  NotReadThenWritten: (0, 1, 1, 1)

subroutine mpi_barrier:
  external:
  shape: (param 1, param 2)
  type:  (integer(), integer())
  ReadNotWritten:     (1, 0)
  NotReadThenWritten: (0, 1)

subroutine mpi_waitall:
  external:
  shape: (param 1, param 2, param 3, param 4)
  type:  (integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 1)

subroutine mpi_bcast:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (0, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 0, 0, 1)
  ReadThenWritten:    (1, 0, 0, 0, 0, 0)
  deps : (1,0,0,0,0,0
          id,
          id,
          id,
          id,
          0,0,0,0,0,0)

subroutine ampi_bcast:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6)
  type:  (metavar arg, integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (0, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 0, 0, 1)
  ReadThenWritten:    (1, 0, 0, 0, 0, 0)
  deps : (1,0,0,0,0,0
          id,
          id,
          id,
          id,
          0,0,0,0,0,0)

subroutine mpi_scatter:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9)
  type:  (metavar arg1, integer(), integer(), metavar arg4, integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 0, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 1, 0, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          1,0,0,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,0)

subroutine ampi_scatter:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9)
  type:  (metavar arg1, integer(), integer(), metavar arg4, integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 0, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 1, 0, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          1,0,0,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,0)

subroutine mpi_gather:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9)
  type:  (metavar arg1, integer(), integer(), metavar arg4, integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 0, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 1, 0, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          1,0,0,1,0,0,0,0,0,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,0)

subroutine ampi_gather:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9)
  type:  (metavar arg1, integer(), integer(), metavar arg4, integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 0, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 1, 0, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          1,0,0,1,0,0,0,0,0,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,0)

subroutine mpi_allgather:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8)
  type:  (metavar arg1, integer(), integer(), metavar arg4, integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 0, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 1, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          1,0,0,0,0,0,0,0,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0)

subroutine ampi_allgather:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8)
  type:  (metavar arg1, integer(), integer(), metavar arg4, integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 0, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 1, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          1,0,0,0,0,0,0,0,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0)

subroutine mpi_scatterv:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9, param 10)
  type:  (metavar arg1, integer(), integer(), integer(), metavar arg5, integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 1, 0, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          id,
          1,0,0,0,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,0,0)

subroutine ampi_scatterv:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9, param 10)
  type:  (metavar arg1, integer(), integer(), integer(), metavar arg5, integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 1, 0, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          id,
          1,0,0,0,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,0,0)

subroutine mpi_gatherv:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9, param 10)
  type:  (metavar arg1, integer(), integer(), metavar arg4, integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 0, 1, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 1, 0, 0, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          1,0,0,1,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,0,0)

subroutine ampi_gatherv:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9, param 10)
  type:  (metavar arg1, integer(), integer(), metavar arg4, integer(), integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 0, 1, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 1, 0, 0, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          1,0,0,1,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,0,0)

subroutine mpi_allgatherv:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9)
  type:  (metavar arg1, integer(), integer(), metavar arg4, integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 0, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 1, 0, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          1,0,0,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,0)

subroutine ampi_allgatherv:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7, param 8, param 9)
  type:  (metavar arg1, integer(), integer(), metavar arg4, integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 0, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 0, 0, 1, 0, 0, 0, 0, 1)
  deps : (id,
          id,
          id,
          1,0,0,0,0,0,0,0,0,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0,0,0)

subroutine mpi_allreduce:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7)
  type:  (metavar arg, metavar arg, integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 1, 0, 0, 0, 0, 1)
  deps : (id,
          1,1,0,0,0,0,0,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0)

subroutine ampi_allreduce:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7)
  type:  (metavar arg, metavar arg, integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 1, 1, 1, 0)
  NotReadThenWritten: (0, 1, 0, 0, 0, 0, 1)
  deps : (id,
          1,1,0,0,0,0,0,
          id,
          id,
          id,
          id,
          0,0,0,0,0,0,0)

subroutine mpi_comm_split:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5)
  type:  (integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 0, 0)
  NotReadThenWritten: (0, 0, 0, 1, 1)

subroutine mpi_get_processor_name:
  external:
  shape: (param 1, param 2, param 3)
  type:  (arrayType(character(), dimColons()), integer(), integer())
  ReadNotWritten:     (0, 0, 0)
  NotReadThenWritten: (1, 1, 1)

subroutine mpi_request_free:
  external:
  shape: (param 1, param 2)
  type:  (integer(), integer())
  ReadNotWritten:     (0, 0)
  NotReadThenWritten: (0, 1)
  ReadThenWritten:    (1, 0)

subroutine mpi_intercomm_create:
  external:
  shape: (param 1, param 2, param 3, param 4, param 5, param 6, param 7)
  type:  (metavar arg, metavar arg, integer(), integer(), integer(), integer(), integer())
  ReadNotWritten:     (1, 1, 1, 1, 1, 0, 0)
  NotReadThenWritten: (0, 0, 0, 0, 0, 1, 1)
