[Numpy-discussion] Do not understand what f2py is reporting

Samuel Dupree sdupree at speakeasy.net
Sat Oct 31 21:03:23 EDT 2020


I'm attempting to build wrappers around two Fortran routines. One is a 
Fortran 77 subroutine (see file gravity_derivs.f) that calls a Fortran 
90 package that performs automatic differentiation (see file 
auto_deriv.f90).

I'm running he Anaconda distribution for Python 3.7.6 on a Mac Pro 
(2019) under Mac OS X Catalina (ver. 10.15.6). The version of NumPy I'm 
running is 1.18.3. The commands I used to attempt the build are 
contained in the file auto_deriv_build. The messages output by f2py are 
captured in the file auto_derivs_build_report.txt.

I don't understand the cause behind the error messages I got, so any 
advice would be welcomed.

Sam Dupree.


-------------- next part --------------
(base) user at Samuels-Mac-Pro auto_deriv % ./auto_deriv_build
f2py build for auto_deriv
deleting previous build
rm: *.so: No such file or directory
building Python wrappers
running build
running config_cc
unifing config_cc, config, build_clib, build_ext, build commands --compiler options
running config_fc
unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options
running build_src
build_src
building extension "gravity_derivs" sources
f2py options: []
f2py:> /var/folders/2r/4bw6nw0x58z0_ybx632_h14m0000gq/T/tmpada983e0/src.macosx-10.9-x86_64-3.7/gravity_derivsmodule.c
creating /var/folders/2r/4bw6nw0x58z0_ybx632_h14m0000gq/T/tmpada983e0/src.macosx-10.9-x86_64-3.7
Reading fortran codes...
	Reading file 'gravity_derivs.f' (format:fix,strict)
{'before': '', 'this': 'use', 'after': 'deriv_class      ! make the module accessible'}
Line #111 in gravity_derivs.f:"      USE deriv_class      ! make the module accessible"
	analyzeline: Could not crack the use statement.
Line #119 in gravity_derivs.f:"      integer * 4            degree"
	updatevars: no name pattern found for entity='*4degree'. Skipping.
Line #121 in gravity_derivs.f:"      integer * 4            order"
	updatevars: no name pattern found for entity='*4order'. Skipping.
Line #122 in gravity_derivs.f:"      integer * 4            Ndim"
	updatevars: no name pattern found for entity='*4ndim'. Skipping.
Line #124 in gravity_derivs.f:"      integer * 4            Mdim"
	updatevars: no name pattern found for entity='*4mdim'. Skipping.
Line #127 in gravity_derivs.f:"      integer * 4            iret"
	updatevars: no name pattern found for entity='*4iret'. Skipping.
Line #145 in gravity_derivs.f:"      integer * 4            deriv"
	updatevars: no name pattern found for entity='*4deriv'. Skipping.
Line #148 in gravity_derivs.f:"      integer * 4            i"
	updatevars: no name pattern found for entity='*4i'. Skipping.
Line #149 in gravity_derivs.f:"      integer * 4            j"
	updatevars: no name pattern found for entity='*4j'. Skipping.
Line #150 in gravity_derivs.f:"      integer * 4            k"
	updatevars: no name pattern found for entity='*4k'. Skipping.
Line #151 in gravity_derivs.f:"      integer * 4            n"
	updatevars: no name pattern found for entity='*4n'. Skipping.
Line #153 in gravity_derivs.f:"      integer * 4            m"
	updatevars: no name pattern found for entity='*4m'. Skipping.
Post-processing...
	Block: gravity_derivs
{'attrspec': ['intent(in)']}
In: :gravity_derivs:gravity_derivs.f:gravity_derivs
vars2fortran: No typespec for argument "ndim".
{'attrspec': ['intent(in)']}
In: :gravity_derivs:gravity_derivs.f:gravity_derivs
vars2fortran: No typespec for argument "mdim".
{'attrspec': ['intent(in)']}
In: :gravity_derivs:gravity_derivs.f:gravity_derivs
vars2fortran: No typespec for argument "degree".
{'attrspec': ['intent(in)']}
In: :gravity_derivs:gravity_derivs.f:gravity_derivs
vars2fortran: No typespec for argument "order".
{'attrspec': ['intent(out)']}
In: :gravity_derivs:gravity_derivs.f:gravity_derivs
vars2fortran: No typespec for argument "iret".
			Block: gravity_derivs
In: :gravity_derivs:gravity_derivs.f:gravity_derivs
analyzevars: typespec of variable 'ndim' is not defined in routine gravity_derivs.
In: :gravity_derivs:gravity_derivs.f:gravity_derivs
analyzevars: typespec of variable 'mdim' is not defined in routine gravity_derivs.
In: :gravity_derivs:gravity_derivs.f:gravity_derivs
analyzevars: typespec of variable 'degree' is not defined in routine gravity_derivs.
In: :gravity_derivs:gravity_derivs.f:gravity_derivs
analyzevars: typespec of variable 'order' is not defined in routine gravity_derivs.
In: :gravity_derivs:gravity_derivs.f:gravity_derivs
analyzevars: typespec of variable 'iret' is not defined in routine gravity_derivs.
Post-processing (stage 2)...
Building modules...
	Building module "gravity_derivs"...
		Constructing wrapper function "gravity_derivs"...
getctype: No C-type found in "{'attrspec': [], 'intent': ['in']}", assuming void.
getctype: No C-type found in "{'attrspec': [], 'intent': ['in']}", assuming void.
getctype: No C-type found in "{'attrspec': [], 'intent': ['in']}", assuming void.
getctype: No C-type found in "{'attrspec': [], 'intent': ['in']}", assuming void.
getctype: No C-type found in "{'attrspec': [], 'intent': ['out']}", assuming void.
getctype: No C-type found in "{'attrspec': [], 'intent': ['in']}", assuming void.
getctype: No C-type found in "{'attrspec': [], 'intent': ['in']}", assuming void.
Traceback (most recent call last):
  File "/Users/user/opt/anaconda3/bin/f2py3", line 33, in <module>
    sys.exit(load_entry_point('numpy==1.19.0', 'console_scripts', 'f2py3')())
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/f2py2e.py", line 694, in main
    run_compile()
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/f2py2e.py", line 661, in run_compile
    setup(ext_modules=[ext])
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/distutils/core.py", line 171, in setup
    return old_setup(**new_attr)
  File "/Users/user/opt/anaconda3/lib/python3.7/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/Users/user/opt/anaconda3/lib/python3.7/distutils/dist.py", line 966, in run_commands
    self.run_command(cmd)
  File "/Users/user/opt/anaconda3/lib/python3.7/distutils/dist.py", line 985, in run_command
    cmd_obj.run()
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/distutils/command/build.py", line 42, in run
    old_build.run(self)
  File "/Users/user/opt/anaconda3/lib/python3.7/distutils/command/build.py", line 135, in run
    self.run_command(cmd_name)
  File "/Users/user/opt/anaconda3/lib/python3.7/distutils/cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "/Users/user/opt/anaconda3/lib/python3.7/distutils/dist.py", line 985, in run_command
    cmd_obj.run()
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/distutils/command/build_src.py", line 146, in run
    self.build_sources()
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/distutils/command/build_src.py", line 163, in build_sources
    self.build_extension_sources(ext)
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/distutils/command/build_src.py", line 323, in build_extension_sources
    sources = self.f2py_sources(sources, ext)
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/distutils/command/build_src.py", line 566, in f2py_sources
    ['-m', ext_name]+f_sources)
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/f2py2e.py", line 468, in run_main
    ret = buildmodules(postlist)
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/f2py2e.py", line 394, in buildmodules
    dict_append(ret[mnames[i]], rules.buildmodule(modules[i], um))
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/rules.py", line 1214, in buildmodule
    api, wrap = buildapi(nb)
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/rules.py", line 1383, in buildapi
    vrd = capi_maps.sign2map(a, var[a])
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/capi_maps.py", line 615, in sign2map
    ret['pydocsign'], ret['pydocsignout'] = getpydocsign(a, var)
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/capi_maps.py", line 424, in getpydocsign
    sig = '%s : %s %s%s' % (a, opt, c2py_map[ctype], init)
KeyError: 'void'
running build
running config_cc
unifing config_cc, config, build_clib, build_ext, build commands --compiler options
running config_fc
unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options
running build_src
build_src
building extension "auto_deriv" sources
f2py options: []
f2py:> /var/folders/2r/4bw6nw0x58z0_ybx632_h14m0000gq/T/tmp3iuof2ym/src.macosx-10.9-x86_64-3.7/auto_derivmodule.c
creating /var/folders/2r/4bw6nw0x58z0_ybx632_h14m0000gq/T/tmp3iuof2ym/src.macosx-10.9-x86_64-3.7
Reading fortran codes...
	Reading file 'auto_deriv.f90' (format:free)
rmbadname1: Replacing "int" with "int_bn".
rmbadname1: Replacing "max" with "max_bn".
rmbadname1: Replacing "min" with "min_bn".
rmbadname1: Replacing "int" with "int_bn".
rmbadname1: Replacing "max" with "max_bn".
rmbadname1: Replacing "min" with "min_bn".
crackline: groupcounter=3 groupname={0: '', 1: 'module', 2: 'interface', 3: 'module', 4: 'module', 5: 'function'}
crackline: Mismatch of blocks encountered. Trying to fix it by assuming "end" statement.
crackline: groupcounter=2 groupname={0: '', 1: 'module', 2: 'interface', 3: 'module', 4: 'module', 5: 'function'}
crackline: Mismatch of blocks encountered. Trying to fix it by assuming "end" statement.
crackline: groupcounter=1 groupname={0: '', 1: 'module', 2: 'interface', 3: 'module', 4: 'module', 5: 'function'}
crackline: Mismatch of blocks encountered. Trying to fix it by assuming "end" statement.
Post-processing...
	Block: auto_deriv
			Block: ieeex_exceptions
				Block: ieee_set_flag
			Block: ad_types
				Block: func
In: :auto_deriv:auto_deriv.f90:ad_types:func
	getarrlen:variable "n" undefined
In: :auto_deriv:auto_deriv.f90:ad_types:func
	getarrlen:variable "nhes" undefined
			Block: ad_utilities
				Block: independent
				Block: derivative
				Block: indep_scalar
				Block: indep_vector
				Block: extract
			Block: ad_auxiliary
In: :auto_deriv:auto_deriv.f90:ad_auxiliary
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_auxiliary
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
				Block: tensor
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_auxiliary:tensor
analyzevars: prefix ('pure') were not used
				Block: is_small
In: :auto_deriv:auto_deriv.f90:ad_auxiliary:is_small
analyzevars: prefix ('elemental') were not used
			Block: ad_assign
				Block: assignment
In: :auto_deriv:auto_deriv.f90:ad_assign:assignment
determineexprtype: could not determine expressions ('=') type.
				Block: ad_relational
					Block: operator
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:operator
determineexprtype: could not determine expressions ('<') type.
					Block: operator
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:operator
determineexprtype: could not determine expressions ('<=') type.
					Block: operator
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:operator
determineexprtype: could not determine expressions ('>') type.
					Block: operator
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:operator
determineexprtype: could not determine expressions ('>=') type.
					Block: operator
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:operator
determineexprtype: could not determine expressions ('==') type.
					Block: operator
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:operator
determineexprtype: could not determine expressions ('/=') type.
					Block: less_fr
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:less_fr
analyzevars: prefix ('elemental') were not used
					Block: less_fs
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:less_fs
analyzevars: prefix ('elemental') were not used
					Block: less_fi
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:less_fi
analyzevars: prefix ('elemental') were not used
					Block: less_rf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:less_rf
analyzevars: prefix ('elemental') were not used
					Block: less_sf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:less_sf
analyzevars: prefix ('elemental') were not used
					Block: less_if
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:less_if
analyzevars: prefix ('elemental') were not used
					Block: less_ff
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:less_ff
analyzevars: prefix ('elemental') were not used
					Block: less_equal_fr
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:less_equal_fr
analyzevars: prefix ('elemental') were not used
					Block: less_equal_fs
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:less_equal_fs
analyzevars: prefix ('elemental') were not used
					Block: less_equal_fi
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:less_equal_fi
analyzevars: prefix ('elemental') were not used
					Block: less_equal_rf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:less_equal_rf
analyzevars: prefix ('elemental') were not used
					Block: less_equal_sf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:less_equal_sf
analyzevars: prefix ('elemental') were not used
					Block: less_equal_if
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:less_equal_if
analyzevars: prefix ('elemental') were not used
					Block: less_equal_ff
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:less_equal_ff
analyzevars: prefix ('elemental') were not used
					Block: greater_fr
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:greater_fr
analyzevars: prefix ('elemental') were not used
					Block: greater_fs
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:greater_fs
analyzevars: prefix ('elemental') were not used
					Block: greater_fi
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:greater_fi
analyzevars: prefix ('elemental') were not used
					Block: greater_rf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:greater_rf
analyzevars: prefix ('elemental') were not used
					Block: greater_sf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:greater_sf
analyzevars: prefix ('elemental') were not used
					Block: greater_if
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:greater_if
analyzevars: prefix ('elemental') were not used
					Block: greater_ff
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:greater_ff
analyzevars: prefix ('elemental') were not used
					Block: greater_equal_fr
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:greater_equal_fr
analyzevars: prefix ('elemental') were not used
					Block: greater_equal_fs
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:greater_equal_fs
analyzevars: prefix ('elemental') were not used
					Block: greater_equal_fi
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:greater_equal_fi
analyzevars: prefix ('elemental') were not used
					Block: greater_equal_rf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:greater_equal_rf
analyzevars: prefix ('elemental') were not used
					Block: greater_equal_sf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:greater_equal_sf
analyzevars: prefix ('elemental') were not used
					Block: greater_equal_if
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:greater_equal_if
analyzevars: prefix ('elemental') were not used
					Block: greater_equal_ff
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:greater_equal_ff
analyzevars: prefix ('elemental') were not used
					Block: equal_fr
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:equal_fr
analyzevars: prefix ('elemental') were not used
					Block: equal_fs
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:equal_fs
analyzevars: prefix ('elemental') were not used
					Block: equal_fi
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:equal_fi
analyzevars: prefix ('elemental') were not used
					Block: equal_rf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:equal_rf
analyzevars: prefix ('elemental') were not used
					Block: equal_sf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:equal_sf
analyzevars: prefix ('elemental') were not used
					Block: equal_if
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:equal_if
analyzevars: prefix ('elemental') were not used
					Block: equal_ff
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:equal_ff
analyzevars: prefix ('elemental') were not used
					Block: not_equal_fr
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:not_equal_fr
analyzevars: prefix ('elemental') were not used
					Block: not_equal_fs
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:not_equal_fs
analyzevars: prefix ('elemental') were not used
					Block: not_equal_fi
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:not_equal_fi
analyzevars: prefix ('elemental') were not used
					Block: not_equal_rf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:not_equal_rf
analyzevars: prefix ('elemental') were not used
					Block: not_equal_sf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:not_equal_sf
analyzevars: prefix ('elemental') were not used
					Block: not_equal_if
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:not_equal_if
analyzevars: prefix ('elemental') were not used
					Block: not_equal_ff
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_relational:not_equal_ff
analyzevars: prefix ('elemental') were not used
				Block: ad_operator_plus
					Block: operator
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_plus:operator
determineexprtype: could not determine expressions ('+') type.
					Block: unary_plus
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_plus:unary_plus
analyzevars: prefix ('elemental') were not used
					Block: add_rf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_plus:add_rf
analyzevars: prefix ('elemental') were not used
					Block: add_sf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_plus:add_sf
analyzevars: prefix ('elemental') were not used
					Block: add_if
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_plus:add_if
analyzevars: prefix ('elemental') were not used
					Block: add_fr
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_plus:add_fr
analyzevars: prefix ('elemental') were not used
					Block: add_fs
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_plus:add_fs
analyzevars: prefix ('elemental') were not used
					Block: add_fi
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_plus:add_fi
analyzevars: prefix ('elemental') were not used
					Block: add_ff
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_plus:add_ff
analyzevars: prefix ('elemental') were not used
				Block: ad_operator_minus
					Block: operator
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_minus:operator
determineexprtype: could not determine expressions ('-') type.
					Block: negate
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_minus:negate
analyzevars: prefix ('elemental') were not used
					Block: sub_rf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_minus:sub_rf
analyzevars: prefix ('elemental') were not used
					Block: sub_sf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_minus:sub_sf
analyzevars: prefix ('elemental') were not used
					Block: sub_if
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_minus:sub_if
analyzevars: prefix ('elemental') were not used
					Block: sub_fr
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_minus:sub_fr
analyzevars: prefix ('elemental') were not used
					Block: sub_fs
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_minus:sub_fs
analyzevars: prefix ('elemental') were not used
					Block: sub_fi
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_minus:sub_fi
analyzevars: prefix ('elemental') were not used
					Block: sub_ff
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_minus:sub_ff
analyzevars: prefix ('elemental') were not used
				Block: ad_operator_star
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: operator
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:operator
determineexprtype: could not determine expressions ('*') type.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:operator
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:operator
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: mul_rf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_rf
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_rf
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_rf
analyzevars: prefix ('elemental') were not used
					Block: mul_sf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_sf
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_sf
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_sf
analyzevars: prefix ('elemental') were not used
					Block: mul_if
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_if
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_if
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_if
analyzevars: prefix ('elemental') were not used
					Block: mul_fr
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_fr
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_fr
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_fr
analyzevars: prefix ('elemental') were not used
					Block: mul_fs
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_fs
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_fs
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_fs
analyzevars: prefix ('elemental') were not used
					Block: mul_fi
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_fi
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_fi
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_fi
analyzevars: prefix ('elemental') were not used
					Block: mul_ff
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_ff
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_ff
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_star:mul_ff
analyzevars: prefix ('elemental') were not used
				Block: ad_operator_slash
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: operator
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:operator
determineexprtype: could not determine expressions ('/') type.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:operator
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:operator
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: div_fr
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_fr
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_fr
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_fr
analyzevars: prefix ('elemental') were not used
					Block: div_fs
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_fs
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_fs
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_fs
analyzevars: prefix ('elemental') were not used
					Block: div_fi
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_fi
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_fi
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_fi
analyzevars: prefix ('elemental') were not used
					Block: div_rf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_rf
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_rf
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_rf
analyzevars: prefix ('elemental') were not used
					Block: div_sf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_sf
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_sf
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_sf
analyzevars: prefix ('elemental') were not used
					Block: div_if
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_if
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_if
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_if
analyzevars: prefix ('elemental') were not used
					Block: div_ff
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_ff
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_ff
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_slash:div_ff
analyzevars: prefix ('elemental') were not used
				Block: ad_fortran_library
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library
get_useparameters: no module ad_assign info used by ad_fortran_library
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: abs
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:abs
get_useparameters: no module ad_assign info used by abs
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:abs
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:abs
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: acos
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:acos
get_useparameters: no module ad_assign info used by acos
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:acos
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:acos
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: aint
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:aint
get_useparameters: no module ad_assign info used by aint
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:aint
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:aint
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: anint
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:anint
get_useparameters: no module ad_assign info used by anint
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:anint
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:anint
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: asin
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:asin
get_useparameters: no module ad_assign info used by asin
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:asin
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:asin
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: atan
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan
get_useparameters: no module ad_assign info used by atan
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: atan2
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2
get_useparameters: no module ad_assign info used by atan2
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: ceiling
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:ceiling
get_useparameters: no module ad_assign info used by ceiling
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:ceiling
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:ceiling
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: cos
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:cos
get_useparameters: no module ad_assign info used by cos
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:cos
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:cos
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: cosh
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:cosh
get_useparameters: no module ad_assign info used by cosh
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:cosh
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:cosh
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: digits
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:digits
get_useparameters: no module ad_assign info used by digits
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:digits
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:digits
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: dim
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dim
get_useparameters: no module ad_assign info used by dim
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dim
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dim
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: dot_product
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product
get_useparameters: no module ad_assign info used by dot_product
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: epsilon
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:epsilon
get_useparameters: no module ad_assign info used by epsilon
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:epsilon
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:epsilon
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: exp
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:exp
get_useparameters: no module ad_assign info used by exp
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:exp
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:exp
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: exponent
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:exponent
get_useparameters: no module ad_assign info used by exponent
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:exponent
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:exponent
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: floor
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:floor
get_useparameters: no module ad_assign info used by floor
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:floor
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:floor
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: fraction
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:fraction
get_useparameters: no module ad_assign info used by fraction
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:fraction
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:fraction
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: huge
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:huge
get_useparameters: no module ad_assign info used by huge
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:huge
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:huge
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: int_bn
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:int_bn
get_useparameters: no module ad_assign info used by int_bn
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:int_bn
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:int_bn
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: kind
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:kind
get_useparameters: no module ad_assign info used by kind
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:kind
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:kind
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: log
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:log
get_useparameters: no module ad_assign info used by log
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:log
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:log
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: log10
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:log10
get_useparameters: no module ad_assign info used by log10
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:log10
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:log10
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: matmul
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul
get_useparameters: no module ad_assign info used by matmul
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: max_bn
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max_bn
get_useparameters: no module ad_assign info used by max_bn
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max_bn
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max_bn
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: maxexponent
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxexponent
get_useparameters: no module ad_assign info used by maxexponent
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxexponent
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxexponent
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: maxloc
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc
get_useparameters: no module ad_assign info used by maxloc
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: maxval
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxval
get_useparameters: no module ad_assign info used by maxval
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxval
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxval
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: min_bn
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min_bn
get_useparameters: no module ad_assign info used by min_bn
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min_bn
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min_bn
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: minexponent
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minexponent
get_useparameters: no module ad_assign info used by minexponent
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minexponent
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minexponent
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: minloc
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc
get_useparameters: no module ad_assign info used by minloc
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: minval
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minval
get_useparameters: no module ad_assign info used by minval
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minval
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minval
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: mod
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:mod
get_useparameters: no module ad_assign info used by mod
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:mod
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:mod
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: modulo
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:modulo
get_useparameters: no module ad_assign info used by modulo
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:modulo
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:modulo
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: nearest
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest
get_useparameters: no module ad_assign info used by nearest
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: nint
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nint
get_useparameters: no module ad_assign info used by nint
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nint
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nint
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: precision
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:precision
get_useparameters: no module ad_assign info used by precision
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:precision
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:precision
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: product
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:product
get_useparameters: no module ad_assign info used by product
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:product
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:product
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: radix
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:radix
get_useparameters: no module ad_assign info used by radix
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:radix
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:radix
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: range
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:range
get_useparameters: no module ad_assign info used by range
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:range
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:range
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: rrspacing
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:rrspacing
get_useparameters: no module ad_assign info used by rrspacing
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:rrspacing
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:rrspacing
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: scale
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:scale
get_useparameters: no module ad_assign info used by scale
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:scale
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:scale
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: set_exponent
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:set_exponent
get_useparameters: no module ad_assign info used by set_exponent
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:set_exponent
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:set_exponent
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: sign
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sign
get_useparameters: no module ad_assign info used by sign
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sign
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sign
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: sin
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sin
get_useparameters: no module ad_assign info used by sin
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sin
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sin
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: sinh
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sinh
get_useparameters: no module ad_assign info used by sinh
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sinh
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sinh
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: spacing
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:spacing
get_useparameters: no module ad_assign info used by spacing
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:spacing
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:spacing
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: sqrt
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sqrt
get_useparameters: no module ad_assign info used by sqrt
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sqrt
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sqrt
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: sum
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sum
get_useparameters: no module ad_assign info used by sum
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sum
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sum
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: tan
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tan
get_useparameters: no module ad_assign info used by tan
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tan
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tan
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: tanh
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tanh
get_useparameters: no module ad_assign info used by tanh
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tanh
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tanh
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: tiny
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tiny
get_useparameters: no module ad_assign info used by tiny
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tiny
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tiny
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
					Block: abs_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:abs_
get_useparameters: no module ad_assign info used by abs_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:abs_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:abs_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:abs_
analyzevars: prefix ('elemental') were not used
					Block: acos_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:acos_
get_useparameters: no module ad_assign info used by acos_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:acos_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:acos_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:acos_
analyzevars: prefix ('elemental') were not used
					Block: aint_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:aint_
get_useparameters: no module ad_assign info used by aint_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:aint_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:aint_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:aint_
analyzevars: prefix ('elemental') were not used
					Block: anint_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:anint_
get_useparameters: no module ad_assign info used by anint_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:anint_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:anint_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:anint_
analyzevars: prefix ('elemental') were not used
					Block: asin_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:asin_
get_useparameters: no module ad_assign info used by asin_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:asin_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:asin_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:asin_
analyzevars: prefix ('elemental') were not used
					Block: atan_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan_
get_useparameters: no module ad_assign info used by atan_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan_
analyzevars: prefix ('elemental') were not used
					Block: atan2_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_ff_
get_useparameters: no module ad_assign info used by atan2_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_ff_
analyzevars: prefix ('elemental') were not used
					Block: atan2_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_rf_
get_useparameters: no module ad_assign info used by atan2_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_rf_
analyzevars: prefix ('elemental') were not used
					Block: atan2_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_fr_
get_useparameters: no module ad_assign info used by atan2_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_fr_
analyzevars: prefix ('elemental') were not used
					Block: atan2_sf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_sf_
get_useparameters: no module ad_assign info used by atan2_sf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_sf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_sf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_sf_
analyzevars: prefix ('elemental') were not used
					Block: atan2_fs_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_fs_
get_useparameters: no module ad_assign info used by atan2_fs_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_fs_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_fs_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:atan2_fs_
analyzevars: prefix ('elemental') were not used
					Block: ceiling_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:ceiling_
get_useparameters: no module ad_assign info used by ceiling_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:ceiling_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:ceiling_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:ceiling_
analyzevars: prefix ('elemental') were not used
					Block: cos_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:cos_
get_useparameters: no module ad_assign info used by cos_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:cos_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:cos_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:cos_
analyzevars: prefix ('elemental') were not used
					Block: cosh_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:cosh_
get_useparameters: no module ad_assign info used by cosh_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:cosh_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:cosh_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:cosh_
analyzevars: prefix ('elemental') were not used
					Block: digits_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:digits_
get_useparameters: no module ad_assign info used by digits_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:digits_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:digits_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:digits_
analyzevars: prefix ('elemental') were not used
					Block: dim_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dim_
get_useparameters: no module ad_assign info used by dim_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dim_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dim_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dim_
analyzevars: prefix ('elemental') were not used
					Block: dot_product_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_ff_
get_useparameters: no module ad_assign info used by dot_product_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_ff_
analyzevars: prefix ('pure') were not used
					Block: dot_product_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_rf_
get_useparameters: no module ad_assign info used by dot_product_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_rf_
analyzevars: prefix ('pure') were not used
					Block: dot_product_sf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_sf_
get_useparameters: no module ad_assign info used by dot_product_sf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_sf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_sf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_sf_
analyzevars: prefix ('pure') were not used
					Block: dot_product_if_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_if_
get_useparameters: no module ad_assign info used by dot_product_if_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_if_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_if_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_if_
analyzevars: prefix ('pure') were not used
					Block: dot_product_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_fr_
get_useparameters: no module ad_assign info used by dot_product_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_fr_
analyzevars: prefix ('pure') were not used
					Block: dot_product_fs_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_fs_
get_useparameters: no module ad_assign info used by dot_product_fs_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_fs_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_fs_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_fs_
analyzevars: prefix ('pure') were not used
					Block: dot_product_fi_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_fi_
get_useparameters: no module ad_assign info used by dot_product_fi_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_fi_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_fi_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:dot_product_fi_
analyzevars: prefix ('pure') were not used
					Block: epsilon_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:epsilon_
get_useparameters: no module ad_assign info used by epsilon_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:epsilon_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:epsilon_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:epsilon_
analyzevars: prefix ('elemental') were not used
					Block: exp_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:exp_
get_useparameters: no module ad_assign info used by exp_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:exp_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:exp_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:exp_
analyzevars: prefix ('elemental') were not used
					Block: exponent_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:exponent_
get_useparameters: no module ad_assign info used by exponent_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:exponent_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:exponent_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:exponent_
analyzevars: prefix ('elemental') were not used
					Block: floor_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:floor_
get_useparameters: no module ad_assign info used by floor_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:floor_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:floor_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:floor_
analyzevars: prefix ('elemental') were not used
					Block: fraction_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:fraction_
get_useparameters: no module ad_assign info used by fraction_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:fraction_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:fraction_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:fraction_
analyzevars: prefix ('elemental') were not used
					Block: huge_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:huge_
get_useparameters: no module ad_assign info used by huge_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:huge_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:huge_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:huge_
analyzevars: prefix ('elemental') were not used
					Block: int_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:int_
get_useparameters: no module ad_assign info used by int_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:int_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:int_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:int_
analyzevars: prefix ('elemental') were not used
					Block: kind_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:kind_
get_useparameters: no module ad_assign info used by kind_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:kind_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:kind_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:kind_
analyzevars: prefix ('elemental') were not used
					Block: log_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:log_
get_useparameters: no module ad_assign info used by log_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:log_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:log_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:log_
analyzevars: prefix ('elemental') were not used
					Block: log10_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:log10_
get_useparameters: no module ad_assign info used by log10_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:log10_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:log10_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:log10_
analyzevars: prefix ('elemental') were not used
					Block: matmul_ff_12_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_ff_12_
get_useparameters: no module ad_assign info used by matmul_ff_12_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_ff_12_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_ff_12_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_ff_12_
analyzevars: prefix ('pure') were not used
					Block: matmul_rf_12_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_rf_12_
get_useparameters: no module ad_assign info used by matmul_rf_12_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_rf_12_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_rf_12_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_rf_12_
analyzevars: prefix ('pure') were not used
					Block: matmul_sf_12_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_sf_12_
get_useparameters: no module ad_assign info used by matmul_sf_12_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_sf_12_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_sf_12_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_sf_12_
analyzevars: prefix ('pure') were not used
					Block: matmul_if_12_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_if_12_
get_useparameters: no module ad_assign info used by matmul_if_12_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_if_12_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_if_12_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_if_12_
analyzevars: prefix ('pure') were not used
					Block: matmul_fr_12_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fr_12_
get_useparameters: no module ad_assign info used by matmul_fr_12_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fr_12_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fr_12_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fr_12_
analyzevars: prefix ('pure') were not used
					Block: matmul_fs_12_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fs_12_
get_useparameters: no module ad_assign info used by matmul_fs_12_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fs_12_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fs_12_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fs_12_
analyzevars: prefix ('pure') were not used
					Block: matmul_fi_12_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fi_12_
get_useparameters: no module ad_assign info used by matmul_fi_12_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fi_12_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fi_12_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fi_12_
analyzevars: prefix ('pure') were not used
					Block: matmul_ff_21_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_ff_21_
get_useparameters: no module ad_assign info used by matmul_ff_21_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_ff_21_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_ff_21_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_ff_21_
analyzevars: prefix ('pure') were not used
					Block: matmul_rf_21_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_rf_21_
get_useparameters: no module ad_assign info used by matmul_rf_21_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_rf_21_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_rf_21_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_rf_21_
analyzevars: prefix ('pure') were not used
					Block: matmul_sf_21_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_sf_21_
get_useparameters: no module ad_assign info used by matmul_sf_21_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_sf_21_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_sf_21_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_sf_21_
analyzevars: prefix ('pure') were not used
					Block: matmul_if_21_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_if_21_
get_useparameters: no module ad_assign info used by matmul_if_21_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_if_21_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_if_21_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_if_21_
analyzevars: prefix ('pure') were not used
					Block: matmul_fr_21_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fr_21_
get_useparameters: no module ad_assign info used by matmul_fr_21_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fr_21_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fr_21_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fr_21_
analyzevars: prefix ('pure') were not used
					Block: matmul_fs_21_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fs_21_
get_useparameters: no module ad_assign info used by matmul_fs_21_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fs_21_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fs_21_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fs_21_
analyzevars: prefix ('pure') were not used
					Block: matmul_fi_21_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fi_21_
get_useparameters: no module ad_assign info used by matmul_fi_21_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fi_21_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fi_21_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fi_21_
analyzevars: prefix ('pure') were not used
					Block: matmul_ff_22_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_ff_22_
get_useparameters: no module ad_assign info used by matmul_ff_22_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_ff_22_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_ff_22_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_ff_22_
analyzevars: prefix ('pure') were not used
					Block: matmul_rf_22_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_rf_22_
get_useparameters: no module ad_assign info used by matmul_rf_22_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_rf_22_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_rf_22_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_rf_22_
analyzevars: prefix ('pure') were not used
					Block: matmul_sf_22_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_sf_22_
get_useparameters: no module ad_assign info used by matmul_sf_22_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_sf_22_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_sf_22_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_sf_22_
analyzevars: prefix ('pure') were not used
					Block: matmul_if_22_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_if_22_
get_useparameters: no module ad_assign info used by matmul_if_22_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_if_22_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_if_22_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_if_22_
analyzevars: prefix ('pure') were not used
					Block: matmul_fr_22_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fr_22_
get_useparameters: no module ad_assign info used by matmul_fr_22_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fr_22_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fr_22_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fr_22_
analyzevars: prefix ('pure') were not used
					Block: matmul_fs_22_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fs_22_
get_useparameters: no module ad_assign info used by matmul_fs_22_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fs_22_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fs_22_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fs_22_
analyzevars: prefix ('pure') were not used
					Block: matmul_fi_22_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fi_22_
get_useparameters: no module ad_assign info used by matmul_fi_22_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fi_22_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fi_22_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:matmul_fi_22_
analyzevars: prefix ('pure') were not used
					Block: max2_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_ff_
get_useparameters: no module ad_assign info used by max2_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_ff_
analyzevars: prefix ('elemental') were not used
					Block: max2_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_fr_
get_useparameters: no module ad_assign info used by max2_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_fr_
analyzevars: prefix ('elemental') were not used
					Block: max2_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_rf_
get_useparameters: no module ad_assign info used by max2_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_rf_
analyzevars: prefix ('elemental') were not used
					Block: max2_fs_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_fs_
get_useparameters: no module ad_assign info used by max2_fs_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_fs_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_fs_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_fs_
analyzevars: prefix ('elemental') were not used
					Block: max2_sf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_sf_
get_useparameters: no module ad_assign info used by max2_sf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_sf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_sf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max2_sf_
analyzevars: prefix ('elemental') were not used
					Block: max3_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max3_
get_useparameters: no module ad_assign info used by max3_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max3_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max3_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:max3_
analyzevars: prefix ('elemental') were not used
					Block: maxexponent_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxexponent_
get_useparameters: no module ad_assign info used by maxexponent_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxexponent_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxexponent_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxexponent_
analyzevars: prefix ('elemental') were not used
					Block: maxloc_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc_1
get_useparameters: no module ad_assign info used by maxloc_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc_1
analyzevars: prefix ('pure') were not used
					Block: maxloc__dim_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc__dim_1
get_useparameters: no module ad_assign info used by maxloc__dim_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc__dim_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc__dim_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc__dim_1
analyzevars: prefix ('pure') were not used
					Block: maxloc__mask_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc__mask_1
get_useparameters: no module ad_assign info used by maxloc__mask_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc__mask_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc__mask_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc__mask_1
analyzevars: prefix ('pure') were not used
					Block: maxloc__dim_mask_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc__dim_mask_1
get_useparameters: no module ad_assign info used by maxloc__dim_mask_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc__dim_mask_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc__dim_mask_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxloc__dim_mask_1
analyzevars: prefix ('pure') were not used
					Block: maxval_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxval_1
get_useparameters: no module ad_assign info used by maxval_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxval_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxval_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:maxval_1
analyzevars: prefix ('pure') were not used
					Block: min2_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_ff_
get_useparameters: no module ad_assign info used by min2_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_ff_
analyzevars: prefix ('elemental') were not used
					Block: min2_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_fr_
get_useparameters: no module ad_assign info used by min2_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_fr_
analyzevars: prefix ('elemental') were not used
					Block: min2_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_rf_
get_useparameters: no module ad_assign info used by min2_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_rf_
analyzevars: prefix ('elemental') were not used
					Block: min2_fs_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_fs_
get_useparameters: no module ad_assign info used by min2_fs_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_fs_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_fs_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_fs_
analyzevars: prefix ('elemental') were not used
					Block: min2_sf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_sf_
get_useparameters: no module ad_assign info used by min2_sf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_sf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_sf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min2_sf_
analyzevars: prefix ('elemental') were not used
					Block: min3_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min3_
get_useparameters: no module ad_assign info used by min3_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min3_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min3_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:min3_
analyzevars: prefix ('elemental') were not used
					Block: minexponent_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minexponent_
get_useparameters: no module ad_assign info used by minexponent_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minexponent_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minexponent_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minexponent_
analyzevars: prefix ('elemental') were not used
					Block: minloc_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc_1
get_useparameters: no module ad_assign info used by minloc_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc_1
analyzevars: prefix ('pure') were not used
					Block: minloc__dim_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc__dim_1
get_useparameters: no module ad_assign info used by minloc__dim_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc__dim_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc__dim_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc__dim_1
analyzevars: prefix ('pure') were not used
					Block: minloc__mask_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc__mask_1
get_useparameters: no module ad_assign info used by minloc__mask_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc__mask_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc__mask_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc__mask_1
analyzevars: prefix ('pure') were not used
					Block: minloc__dim_mask_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc__dim_mask_1
get_useparameters: no module ad_assign info used by minloc__dim_mask_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc__dim_mask_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc__dim_mask_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
appenddecl: "dimension" not implemented.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minloc__dim_mask_1
analyzevars: prefix ('pure') were not used
					Block: minval_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minval_1
get_useparameters: no module ad_assign info used by minval_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minval_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minval_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:minval_1
analyzevars: prefix ('pure') were not used
					Block: mod_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:mod_ff_
get_useparameters: no module ad_assign info used by mod_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:mod_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:mod_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:mod_ff_
analyzevars: prefix ('elemental') were not used
					Block: mod_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:mod_fr_
get_useparameters: no module ad_assign info used by mod_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:mod_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:mod_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:mod_fr_
analyzevars: prefix ('elemental') were not used
					Block: mod_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:mod_rf_
get_useparameters: no module ad_assign info used by mod_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:mod_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:mod_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:mod_rf_
analyzevars: prefix ('elemental') were not used
					Block: modulo_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:modulo_ff_
get_useparameters: no module ad_assign info used by modulo_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:modulo_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:modulo_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:modulo_ff_
analyzevars: prefix ('elemental') were not used
					Block: modulo_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:modulo_fr_
get_useparameters: no module ad_assign info used by modulo_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:modulo_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:modulo_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:modulo_fr_
analyzevars: prefix ('elemental') were not used
					Block: modulo_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:modulo_rf_
get_useparameters: no module ad_assign info used by modulo_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:modulo_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:modulo_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:modulo_rf_
analyzevars: prefix ('elemental') were not used
					Block: nearest_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_ff_
get_useparameters: no module ad_assign info used by nearest_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_ff_
analyzevars: prefix ('elemental') were not used
					Block: nearest_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_rf_
get_useparameters: no module ad_assign info used by nearest_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_rf_
analyzevars: prefix ('elemental') were not used
					Block: nearest_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_fr_
get_useparameters: no module ad_assign info used by nearest_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_fr_
analyzevars: prefix ('elemental') were not used
					Block: nearest_sf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_sf_
get_useparameters: no module ad_assign info used by nearest_sf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_sf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_sf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_sf_
analyzevars: prefix ('elemental') were not used
					Block: nearest_fs_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_fs_
get_useparameters: no module ad_assign info used by nearest_fs_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_fs_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_fs_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nearest_fs_
analyzevars: prefix ('elemental') were not used
					Block: nint_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nint_
get_useparameters: no module ad_assign info used by nint_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nint_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nint_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:nint_
analyzevars: prefix ('elemental') were not used
					Block: precision_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:precision_
get_useparameters: no module ad_assign info used by precision_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:precision_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:precision_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:precision_
analyzevars: prefix ('elemental') were not used
					Block: product_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:product_1
get_useparameters: no module ad_assign info used by product_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:product_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:product_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:product_1
analyzevars: prefix ('pure') were not used
					Block: radix_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:radix_
get_useparameters: no module ad_assign info used by radix_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:radix_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:radix_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:radix_
analyzevars: prefix ('elemental') were not used
					Block: range_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:range_
get_useparameters: no module ad_assign info used by range_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:range_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:range_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:range_
analyzevars: prefix ('elemental') were not used
					Block: rrspacing_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:rrspacing_
get_useparameters: no module ad_assign info used by rrspacing_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:rrspacing_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:rrspacing_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:rrspacing_
analyzevars: prefix ('elemental') were not used
					Block: scale_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:scale_
get_useparameters: no module ad_assign info used by scale_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:scale_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:scale_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:scale_
analyzevars: prefix ('elemental') were not used
					Block: set_exponent_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:set_exponent_
get_useparameters: no module ad_assign info used by set_exponent_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:set_exponent_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:set_exponent_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:set_exponent_
analyzevars: prefix ('elemental') were not used
					Block: sign_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sign_ff_
get_useparameters: no module ad_assign info used by sign_ff_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sign_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sign_ff_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sign_ff_
analyzevars: prefix ('elemental') were not used
					Block: sign_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sign_rf_
get_useparameters: no module ad_assign info used by sign_rf_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sign_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sign_rf_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sign_rf_
analyzevars: prefix ('elemental') were not used
					Block: sign_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sign_fr_
get_useparameters: no module ad_assign info used by sign_fr_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sign_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sign_fr_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sign_fr_
analyzevars: prefix ('elemental') were not used
					Block: sin_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sin_
get_useparameters: no module ad_assign info used by sin_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sin_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sin_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sin_
analyzevars: prefix ('elemental') were not used
					Block: sinh_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sinh_
get_useparameters: no module ad_assign info used by sinh_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sinh_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sinh_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sinh_
analyzevars: prefix ('elemental') were not used
					Block: spacing_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:spacing_
get_useparameters: no module ad_assign info used by spacing_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:spacing_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:spacing_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:spacing_
analyzevars: prefix ('elemental') were not used
					Block: sqrt_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sqrt_
get_useparameters: no module ad_assign info used by sqrt_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sqrt_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sqrt_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sqrt_
analyzevars: prefix ('elemental') were not used
					Block: sum_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sum_1
get_useparameters: no module ad_assign info used by sum_1
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sum_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sum_1
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:sum_1
analyzevars: prefix ('pure') were not used
					Block: tan_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tan_
get_useparameters: no module ad_assign info used by tan_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tan_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tan_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tan_
analyzevars: prefix ('elemental') were not used
					Block: tanh_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tanh_
get_useparameters: no module ad_assign info used by tanh_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tanh_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tanh_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tanh_
analyzevars: prefix ('elemental') were not used
					Block: tiny_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tiny_
get_useparameters: no module ad_assign info used by tiny_
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tiny_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tiny_
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_fortran_library:tiny_
analyzevars: prefix ('elemental') were not used
				Block: ad_operator_power
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power
get_useparameters: no module ad_assign info used by ad_operator_power
					Block: operator
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:operator
determineexprtype: could not determine expressions ('**') type.
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:operator
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:operator
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:operator
get_useparameters: no module ad_assign info used by operator
					Block: power_fr
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_fr
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_fr
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_fr
get_useparameters: no module ad_assign info used by power_fr
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_fr
analyzevars: prefix ('elemental') were not used
					Block: power_fs
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_fs
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_fs
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_fs
get_useparameters: no module ad_assign info used by power_fs
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_fs
analyzevars: prefix ('elemental') were not used
					Block: power_fi
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_fi
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_fi
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_fi
get_useparameters: no module ad_assign info used by power_fi
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_fi
analyzevars: prefix ('elemental') were not used
					Block: power_rf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_rf
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_rf
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_rf
get_useparameters: no module ad_assign info used by power_rf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_rf
analyzevars: prefix ('elemental') were not used
					Block: power_sf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_sf
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_sf
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_sf
get_useparameters: no module ad_assign info used by power_sf
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_sf
analyzevars: prefix ('elemental') were not used
					Block: power_if
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_if
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_if
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_if
get_useparameters: no module ad_assign info used by power_if
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_if
analyzevars: prefix ('elemental') were not used
					Block: power_ff
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_ff
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((i, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_ff
get_parameters: got "invalid syntax (<string>, line 1)" on '(/((j, i=j,n), j=1,n)/)'
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_ff
get_useparameters: no module ad_assign info used by power_ff
In: :auto_deriv:auto_deriv.f90:ad_assign:ad_operator_power:power_ff
analyzevars: prefix ('elemental') were not used
				Block: deriv_class
In: :auto_deriv:auto_deriv.f90:ad_assign:deriv_class
get_useparameters: no module ad_assign info used by deriv_class
Post-processing (stage 2)...
	Block: auto_deriv
		Block: unknown_interface
			Block: ieeex_exceptions
				Block: ieee_set_flag
			Block: ad_types
				Block: func
			Block: ad_utilities
				Block: derivative
				Block: indep_scalar
				Block: indep_vector
				Block: extract
			Block: ad_auxiliary
				Block: tensor
				Block: is_small
			Block: ad_assign
				Block: ad_relational
					Block: less_fr
					Block: less_fs
					Block: less_fi
					Block: less_rf
					Block: less_sf
					Block: less_if
					Block: less_ff
					Block: less_equal_fr
					Block: less_equal_fs
					Block: less_equal_fi
					Block: less_equal_rf
					Block: less_equal_sf
					Block: less_equal_if
					Block: less_equal_ff
					Block: greater_fr
					Block: greater_fs
					Block: greater_fi
					Block: greater_rf
					Block: greater_sf
					Block: greater_if
					Block: greater_ff
					Block: greater_equal_fr
					Block: greater_equal_fs
					Block: greater_equal_fi
					Block: greater_equal_rf
					Block: greater_equal_sf
					Block: greater_equal_if
					Block: greater_equal_ff
					Block: equal_fr
					Block: equal_fs
					Block: equal_fi
					Block: equal_rf
					Block: equal_sf
					Block: equal_if
					Block: equal_ff
					Block: not_equal_fr
					Block: not_equal_fs
					Block: not_equal_fi
					Block: not_equal_rf
					Block: not_equal_sf
					Block: not_equal_if
					Block: not_equal_ff
				Block: ad_operator_plus
					Block: unary_plus
					Block: add_rf
					Block: add_sf
					Block: add_if
					Block: add_fr
					Block: add_fs
					Block: add_fi
					Block: add_ff
				Block: ad_operator_minus
					Block: negate
					Block: sub_rf
					Block: sub_sf
					Block: sub_if
					Block: sub_fr
					Block: sub_fs
					Block: sub_fi
					Block: sub_ff
				Block: ad_operator_star
					Block: mul_rf
					Block: mul_sf
					Block: mul_if
					Block: mul_fr
					Block: mul_fs
					Block: mul_fi
					Block: mul_ff
				Block: ad_operator_slash
					Block: div_fr
					Block: div_fs
					Block: div_fi
					Block: div_rf
					Block: div_sf
					Block: div_if
					Block: div_ff
				Block: ad_fortran_library
					Block: abs_
					Block: acos_
					Block: aint_
					Block: anint_
					Block: asin_
					Block: atan_
					Block: atan2_ff_
					Block: atan2_rf_
					Block: atan2_fr_
					Block: atan2_sf_
					Block: atan2_fs_
					Block: ceiling_
					Block: cos_
					Block: cosh_
					Block: digits_
					Block: dim_
					Block: dot_product_ff_
					Block: dot_product_rf_
					Block: dot_product_sf_
					Block: dot_product_if_
					Block: dot_product_fr_
					Block: dot_product_fs_
					Block: dot_product_fi_
					Block: epsilon_
					Block: exp_
					Block: exponent_
					Block: floor_
					Block: fraction_
					Block: huge_
					Block: int_
					Block: kind_
					Block: log_
					Block: log10_
					Block: matmul_ff_12_
					Block: matmul_rf_12_
					Block: matmul_sf_12_
					Block: matmul_if_12_
					Block: matmul_fr_12_
					Block: matmul_fs_12_
					Block: matmul_fi_12_
					Block: matmul_ff_21_
					Block: matmul_rf_21_
					Block: matmul_sf_21_
					Block: matmul_if_21_
					Block: matmul_fr_21_
					Block: matmul_fs_21_
					Block: matmul_fi_21_
					Block: matmul_ff_22_
					Block: matmul_rf_22_
					Block: matmul_sf_22_
					Block: matmul_if_22_
					Block: matmul_fr_22_
					Block: matmul_fs_22_
					Block: matmul_fi_22_
					Block: max2_ff_
					Block: max2_fr_
					Block: max2_rf_
					Block: max2_fs_
					Block: max2_sf_
					Block: max3_
					Block: maxexponent_
					Block: maxloc_1
					Block: maxloc__dim_1
					Block: maxloc__mask_1
					Block: maxloc__dim_mask_1
					Block: maxval_1
					Block: min2_ff_
					Block: min2_fr_
					Block: min2_rf_
					Block: min2_fs_
					Block: min2_sf_
					Block: min3_
					Block: minexponent_
					Block: minloc_1
					Block: minloc__dim_1
					Block: minloc__mask_1
					Block: minloc__dim_mask_1
					Block: minval_1
					Block: mod_ff_
					Block: mod_fr_
					Block: mod_rf_
					Block: modulo_ff_
					Block: modulo_fr_
					Block: modulo_rf_
					Block: nearest_ff_
					Block: nearest_rf_
					Block: nearest_fr_
					Block: nearest_sf_
					Block: nearest_fs_
					Block: nint_
					Block: precision_
					Block: product_1
					Block: radix_
					Block: range_
					Block: rrspacing_
					Block: scale_
					Block: set_exponent_
					Block: sign_ff_
					Block: sign_rf_
					Block: sign_fr_
					Block: sin_
					Block: sinh_
					Block: spacing_
					Block: sqrt_
					Block: sum_1
					Block: tan_
					Block: tanh_
					Block: tiny_
				Block: ad_operator_power
					Block: power_fr
					Block: power_fs
					Block: power_fi
					Block: power_rf
					Block: power_sf
					Block: power_if
					Block: power_ff
				Block: deriv_class
Building modules...
	Building module "auto_deriv"...
		Constructing F90 module support for "ieeex_exceptions"...
		  Variables: ieee_overflow ieee_divide_by_zero ieee_invalid ieee_underflow ieee_inexact
			Constructing wrapper function "ieeex_exceptions.ieee_set_flag"...
			  ieee_set_flag(flag,flag_value)
		Constructing F90 module support for "ad_types"...
		  Variables: n dpk spk ik nhes order_is_1or2 order_is_2
Skipping type func
		Constructing F90 module support for "ad_utilities"...
			Constructing wrapper function "ad_utilities.derivative"...
			  derivative(order)
			Constructing wrapper function "ad_utilities.indep_scalar"...
getctype: No C-type found in "{'typespec': 'type', 'typename': 'func', 'attrspec': [], 'intent': ['out']}", assuming void.
getctype: No C-type found in "{'typespec': 'type', 'typename': 'func', 'attrspec': [], 'intent': ['out']}", assuming void.
getctype: No C-type found in "{'typespec': 'type', 'typename': 'func', 'attrspec': [], 'intent': ['out']}", assuming void.
Traceback (most recent call last):
  File "/Users/user/opt/anaconda3/bin/f2py3", line 33, in <module>
    sys.exit(load_entry_point('numpy==1.19.0', 'console_scripts', 'f2py3')())
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/f2py2e.py", line 694, in main
    run_compile()
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/f2py2e.py", line 661, in run_compile
    setup(ext_modules=[ext])
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/distutils/core.py", line 171, in setup
    return old_setup(**new_attr)
  File "/Users/user/opt/anaconda3/lib/python3.7/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/Users/user/opt/anaconda3/lib/python3.7/distutils/dist.py", line 966, in run_commands
    self.run_command(cmd)
  File "/Users/user/opt/anaconda3/lib/python3.7/distutils/dist.py", line 985, in run_command
    cmd_obj.run()
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/distutils/command/build.py", line 42, in run
    old_build.run(self)
  File "/Users/user/opt/anaconda3/lib/python3.7/distutils/command/build.py", line 135, in run
    self.run_command(cmd_name)
  File "/Users/user/opt/anaconda3/lib/python3.7/distutils/cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "/Users/user/opt/anaconda3/lib/python3.7/distutils/dist.py", line 985, in run_command
    cmd_obj.run()
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/distutils/command/build_src.py", line 146, in run
    self.build_sources()
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/distutils/command/build_src.py", line 163, in build_sources
    self.build_extension_sources(ext)
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/distutils/command/build_src.py", line 323, in build_extension_sources
    sources = self.f2py_sources(sources, ext)
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/distutils/command/build_src.py", line 566, in f2py_sources
    ['-m', ext_name]+f_sources)
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/f2py2e.py", line 468, in run_main
    ret = buildmodules(postlist)
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/f2py2e.py", line 394, in buildmodules
    dict_append(ret[mnames[i]], rules.buildmodule(modules[i], um))
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/rules.py", line 1231, in buildmodule
    mr, wrap = f90mod_rules.buildhooks(m)
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/f90mod_rules.py", line 202, in buildhooks
    api, wrap = rules.buildapi(b)
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/rules.py", line 1383, in buildapi
    vrd = capi_maps.sign2map(a, var[a])
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/capi_maps.py", line 615, in sign2map
    ret['pydocsign'], ret['pydocsignout'] = getpydocsign(a, var)
  File "/Users/user/opt/anaconda3/lib/python3.7/site-packages/numpy/f2py/capi_maps.py", line 424, in getpydocsign
    sig = '%s : %s %s%s' % (a, opt, c2py_map[ctype], init)
KeyError: 'void'
done.
(base) user at Samuels-Mac-Pro auto_deriv % 
-------------- next part --------------
      subroutine gravity_derivs( Ndim, Mdim, degree, order, Ae, GM,
     1                          C, S, state_bdyf, acc_bdyf,
     2                          acc_partials_bdyf, iret )
! ----------------------------------------------------------------------
!
!  Purpose: Compute geopotential acceleration and its Hessian Matrix
!  -------
!
!  Variable
!   Name       Type   I/O    Units    Description
!  --------    ----   ---   -------   ----------------------------------
!  Ndim        I*4     I     None     Declared row dimension for
!                                     spherical harmonics matrices
!
!  Mdim        I*4     I     None     Declared column dimension for
!                                     spherical harmonics matrices
!
!  degree      I*4     I     None     Degree of the gravity model
!                                     to be used
!
!  order       I*4     I     None     Order of the gravity model
!                                     to be used
!
!  Ae          R*8     I     C.U.     Body equatorial radius in
!                                     canonical units (C.U.)
!
!  GM          R*8     I     C.U.     Body gravitational parameter in
!                                     canonical units (C.U.)
!
!  C           R*8     I     None     Matrix dimensioned containing:
! (Ndim,Ndim)                          1. unnormalized
!                                      2. normalized
!
!  S           R*8     I     None     Matrix dimensioned containing:
! (Ndim,Ndim)                          1. unnormalized
!                                      2. normalized
!
! state_bdyf   R*8     I     C.U.     Vector containing the vehicle's
! (6)                                 position and velocity in body
!                                     fixed centered frame in
!                                     canonical units
!
! acc_bdyf     R*8     O     C.U.     Vector containing the vehicle's
! (3)                                 acceleration in body fixed
!                                     centered frame in canonical units
! acc_partials_bdyf
! (6,6)        R*8     O     C.U.     Matrix containing Hessian Matrix
!                                     for the acceleration in canonical
!                                     units
!
!  iret        I*4     I     None     Return code where:
!                                      iret = 0 - no errors
!                                      iret = 1 - error encountered
!
!
!
!  Author: HKK - INPE - May 2012 - Version 1.0
!  ------
!
!
!
!  Background
!  ----------
!  This subroutine is an adaptation of Subroutine Leg_ForCol_Ac 
!  developed by Kuga and Carrara to return both the body fixed
!  acceleration and the acceleration Hessian Matrix.
!
!  The acceleration Hessian matrix is computed using the Auto_Deriv
!  code developed by Stamatiadis and Farantos that uses Automatic
!  Differentiation (AD) to compute the derivatives.
!
!
!
!  Restrictions and Limitations
!  ----------------------------
!   1. This implementation requires that the full size gravity model
!      be input, whether the coefficients be normalized or
!      unnormalized.
!
!   2. The degree and order of the gravity model to be used must
!      be equal, otherwise the return iret is set to one (1) and
!      an error return is executed.
!
!   3. The order of the partial derivatives returned in the Hessian
!      Matrix reflects an order used by the differential equation
!      solver DIVA (Math77) applied to systems of second order
!      variational equations.
!
!
!
!  References
!  ----------
!   1. Kuga, H.K.; Carrara, V. "Fortran- and C-codes for higher order
!      and degree geopotential computation." 
!      URL: http://www.dem.inpe.br/~hkk/software/high_geopot.htm
!      Date Last Accessed: 26-Jan-2020
!
!   2. S. Stamatiadis, S.C. Farantos, "Auto_Deriv: Tool for automatic
!      differentiation of a Fortran code," Computer Physics
!      Communications, Vol. 181, pp. 1818-1819, 2010,
!      URL: 
!  https://www.sciencedirect.com/science/article/pii/S0010465510002444,
!      Date Last Accessed: 26-Jan-2020
!
!   3. [TBD]
!
!-----------------------------------------------------------------------


      USE deriv_class      ! make the module accessible

      implicit none


c ----------------------------------------------------------------------
c     Argument List Variables
c ----------------------------------------------------------------------

      integer * 4            degree
      integer * 4            order
      
      integer * 4            Ndim
      integer * 4            Mdim
      
      integer * 4            iret


      double precision       Ae
      double precision       GM
      double precision       C(0:Ndim,0:Mdim)
      double precision       S(0:Ndim,0:Mdim)
      
      double precision       state_bdyf(6)
      
      double precision       acc_bdyf(3)
      double precision       acc_partials_bdyf(6,6)


! Locals
! ------
c ----------------------------------------------------------------------
c     Local Variables
c ----------------------------------------------------------------------

      integer * 4            deriv
      parameter            ( deriv = 2 )
      
      integer * 4            i
      integer * 4            j
      integer * 4            k
      integer * 4            n
      integer * 4            m
      
      double precision       grav_pot
      double precision       mu
      double precision       pos_bdyf(3)
      double precision       vel_bdyf(3)
      double precision       Dacc(6)
      double precision       gradV(6)
      double precision       DDacc(21)
      double precision       anm, bnm, am, an



c ----------------------------------------------------------------------
c     variables containing the independent variable used for the
c     differentiation
c ----------------------------------------------------------------------

      TYPE (func)         :: var_(6),
     1                       acc_(3),
     2                       RxovR_, RyovR_, RzovR_, Rmag_, q,
     3                       t, u, tf,
     4                       al, sl, cl,
     5                       GMr,
     6                       Vl, Vf, Vr,
     7                       pn(0:degree), qn(0:degree),
     8                       Pnm, dPnm,
     9                       Pnm1m, Pnm2m, sm, cm, sml, cml,
     A                       qC, qS, Xc, Xs, Xcf, Xsf, Xcr, Xsr,
     B                       Omega, V

C
Cf2py   intent(in) Ndim, Mdim, degree, order, Ae, GM, C, S
Cf2py   intent(in) state_bdyf
Cf2py   intent(out) acc_bdyf, acc_partials_bdyf, iret
Cf2py   depend(Ndim,Mdim) C, S
Cf2py   depend(degree) pn, qn
C




c ----------------------------------------------------------------------
c ----------------------------------------------------------------------

      iret = 0



c ----------------------------------------------------------------------
c     load the input position and velocity vectors to local variables
c ----------------------------------------------------------------------

      pos_bdyf(1:3) = state_bdyf(1:3)
      vel_bdyf(1:3) = state_bdyf(4:6)



c ----------------------------------------------------------------------
c     copy the body's gravitational parameter to a local variable
c ----------------------------------------------------------------------

      mu = GM



c ----------------------------------------------------------------------
c     call derivative() to declare the order of the derivatives
c ----------------------------------------------------------------------

      CALL derivative( deriv )



c ----------------------------------------------------------------------
c     declare as independent variables the (x, y, z) and assign them
c     them their values (x_, y_, z_)
c ----------------------------------------------------------------------

      CALL independent( 1, var_(1), pos_bdyf(1) )     
      CALL independent( 3, var_(2), pos_bdyf(2) )
      CALL independent( 5, var_(3), pos_bdyf(3) )

      CALL independent( 2, var_(4), vel_bdyf(1) )     
      CALL independent( 4, var_(5), vel_bdyf(2) )
      CALL independent( 6, var_(6), vel_bdyf(3) )



c ----------------------------------------------------------------------
c    define variables for use by Automatic Differentiation code
c ----------------------------------------------------------------------

      Rmag_  = sqrt( var_(1)**2 + var_(2)**2 + var_(3)**2 )

      RxovR_ = var_(1) / Rmag_
      RyovR_ = var_(2) / Rmag_
      RzovR_ = var_(3) / Rmag_
      
      q      = Ae / Rmag_
      t      = RzovR_                                      ! sin (lat)
      u      = sqrt( 1.d0  -  RzovR_ * RzovR_ )
      tf     = RzovR_ / sqrt( 1.d0  -  RzovR_ * RzovR_ )   ! tan (lat)
      al     = atan2( RyovR_, RxovR_ )
      sl     = sin( al )                                   ! sin (long)
      cl     = cos( al )                                   ! cos (long)
      GMr    = mu / Rmag_



c ----------------------------------------------------------------------
c     Summation initialization
c ----------------------------------------------------------------------

      Vl = 0.d0
      Vf = 0.d0
      Vr = 0.d0
      
      Omega = 0.d0



c ----------------------------------------------------------------------
c ----------------------------------------------------------------------

      if( degree .gt. 0 .and. order .ge. 0 ) then



c ----------------------------------------------------------------------
c     pre-store sectoral polynomials and q(m) = (Ae/r)**m
c ----------------------------------------------------------------------

         pn(0) = 1.d0
         pn(1) = 1.7320508075688773D0 * u ! sqrt(3) * cos (lat)
         qn(0) = 1.d0
         qn(1) = q

         !do m = 2, Nm
         do m = 2, degree
            am = dble(m)
            pn(m) = u * dsqrt(1.d0+0.5d0/am) * pn(m-1)
            qn(m) = q * qn(m-1)
         end do

         ! Initialize sin and cos recursions
         sm = 0.d0
         cm = 1.d0

         ! Outer loop
         !do m=0,Nm
         do m=0,order
      
! init 
            am = dble(m)

! For m = n 
            Pnm   = pn(m)             ! m=n sectoral
            Pnm1m = Pnm
            Pnm2m = 0.d0

! Init Xc, Xs sums
           Xc = qn(m) * C(m,m) * Pnm 
           Xs = qn(m) * S(m,m) * Pnm

! Inner Loop 
            !do   n=m+1,Nm 
            do   n=m+1,degree
              an = dble(n)
              anm = dsqrt( ((an+an-1.d0)*(an+an+1.d0))
     &              / ((an-am)*(an+am)) )
              bnm = dsqrt( ((an+an+1.d0)*(an+am-1.d0)*(an-am-1.d0))
     &              / ((an-am)*(an+am)*(an+an-3.d0)) )

! Pnm recursion
              Pnm  = anm * t * Pnm1m - bnm * Pnm2m

! Store
              Pnm2m = Pnm1m
              Pnm1m = Pnm

! Inner sum
              if (n .lt. 2) cycle
              Xc = Xc + qn(n) * C(n,m) * Pnm
              Xs = Xs + qn(n) * S(n,m) * Pnm

            end do

! Outer sum
           Omega = Omega + (Xc*cm + Xs*sm)

! sin and cos recursions to next m
            cml = cl*cm - sm*sl
            sml = cl*sm + cm*sl
            cm  = cml ! save to next m
            sm  = sml ! save to next m

         end do
         
      end if

! Finalization, include n=0 (P00=1), 
! for n=1 all terms are zero: C,S(1,1), C,S(1,0) = 0
      V = -GMr * (1.d0+Omega)



c ----------------------------------------------------------------------
c     CALL extract() to compute the acceleration and its partials
c     store the acceleration and its partials in output variables
c ----------------------------------------------------------------------

      CALL extract( V, grav_pot, Dacc, DDacc )

      acc_bdyf(1) = -Dacc(1)
      acc_bdyf(2) = -Dacc(3)
      acc_bdyf(3) = -Dacc(5)
      
      gradV(1:6)  =  Dacc(1:6)
      
      k = 0
      DO   i = 1, 6
         DO   j = i, 6
         write( *, * ) 'i, j, k, k+j = ', i, j, k, k+j
         acc_partials_bdyf(i,j) =  DDacc(k+j)
         acc_partials_bdyf(j,i) =  DDacc(k+j)
         END DO
         k = k + 6 - i
      END DO
      
      WRITE( *, * )
      WRITE( *, * )
      WRITE( *, * )
      WRITE( *, * ) ' in gravity_derivs'
      WRITE( *, * ) ' -----------------'
      WRITE( *, * )
      WRITE( *, 1040 ) ' grav potential         = ', grav_pot
      WRITE( *, * )
      WRITE( *, 1040 ) ' grav_acc               = ', acc_bdyf
      WRITE( *, * )
      WRITE( *, 1050 ) ' gradient (NxM)         = ', gradV
      WRITE( *, * )
      WRITE( *, 1050 ) ' partials (NxM)         = ', 
     1     ( acc_partials_bdyf(1,j), j = 1, 6 ), 
     2     ( acc_partials_bdyf(2,j), j = 1, 6 ), 
     3     ( acc_partials_bdyf(3,j), j = 1, 6 ), 
     4     ( acc_partials_bdyf(4,j), j = 1, 6 ), 
     5     ( acc_partials_bdyf(5,j), j = 1, 6 ), 
     6     ( acc_partials_bdyf(6,j), j = 1, 6 )



c ----------------------------------------------------------------------
c     return to the calling routine
c ----------------------------------------------------------------------

      RETURN



c ----------------------------------------------------------------------
c     format statements
c ---------------------------------------------------------------------

 1040 FORMAT( a27, 1p, e27.16, 3x, e27.16, 3x, e27.16, 0p, /,
     1        ( 1p, t28, e27.16, 3x, e27.16, 3x, e27.16, 0p ) )

 1050 FORMAT( a27, 1p, e27.16, 3x, e27.16, 3x, e27.16, 3x, e27.16, 3x,
     1        e27.16,3x, e27.16, 0p, /,
     2      ( t28, 1p, e27.16, 3x, e27.16, 3x, e27.16, 3x, e27.16, 3x,
     3        e27.16,3x, e27.16, 0p ) )



c ----------------------------------------------------------------------
c    end of subroutine gravity_derivs
c ----------------------------------------------------------------------

      END
-------------- next part --------------
!! Source conforms to 
!! Fortran 95 (ISO/IEC 1539-1:1997) "Base language"  + 
!! TR-15580: Floating-point exception handling


!! If your f95 compiler does not support "TR-15580: Floating-point exception
!! handling", i.e. warns about (the lack of) the IEEEx_EXCEPTIONS module,
!! please uncomment the following module

MODULE IEEEx_EXCEPTIONS
  IMPLICIT NONE

  INTEGER, PARAMETER :: IEEE_OVERFLOW       = 1
  INTEGER, PARAMETER :: IEEE_DIVIDE_BY_ZERO = 2
  INTEGER, PARAMETER :: IEEE_INVALID        = 3
  INTEGER, PARAMETER :: IEEE_UNDERFLOW      = 4
  INTEGER, PARAMETER :: IEEE_INEXACT        = 5

CONTAINS
  ELEMENTAL SUBROUTINE IEEE_SET_FLAG(flag, flag_value)
    IMPLICIT NONE
    INTEGER, INTENT (in) :: flag
    LOGICAL, INTENT (in) :: flag_value

    REAL :: x, y

    IF (flag_value .EQV. .FALSE.) RETURN

    SELECT CASE (flag)
    CASE (IEEE_INVALID)
       x = -1.0
       y = SQRT(x)
    CASE (IEEE_DIVIDE_BY_ZERO)
       x = 0.0
       y = 1.0/x
    END SELECT
  END SUBROUTINE IEEE_SET_FLAG

END MODULE IEEEx_EXCEPTIONS


MODULE ad_types
  IMPLICIT NONE

!  INTEGER, PARAMETER :: n = 3         ! number of independent variables
  INTEGER, PARAMETER :: n = 6         ! number of independent variables
!  INTEGER, PARAMETER :: n = 8         ! number of independent variables

  !----------------------------------------------------------------------------
  !                You SHOULD NOT NEED to change anything below.
  !----------------------------------------------------------------------------

  ! ***************** WARNING: dpk, spk MUST BE NOT EQUAL. ******************

  INTEGER, PARAMETER :: dpk = KIND(1.d0)  
  ! kind for real for dependent and independent variables

  INTEGER, PARAMETER :: spk = KIND(1.0)   
  ! other kind for real variables in mixed-mode arithmetic

  INTEGER, PARAMETER :: ik  = KIND(1)     
  ! kind for integer variables in mixed-mode arithmetic

  ! the above to support expressions like: f = 2 * x + 3.0 * y + 4.d0

  !----------------------------------------------------------------------------
  !                    You MUST NOT change anything below.
  !----------------------------------------------------------------------------

  INTEGER, PARAMETER :: nhes = (n * (n + 1)) / 2 ! dimension of the Hessian pack

  LOGICAL :: order_is_1or2, order_is_2

  TYPE func 
     SEQUENCE  ! for use with common and equivalence blocks
     REAL (dpk) :: value    = 0.0_dpk
     REAL (dpk) :: x(n)     = 0.0_dpk
     REAL (dpk) :: xx(nhes) = 0.0_dpk
  END TYPE func

END MODULE ad_types

MODULE ad_utilities
  USE ad_types

  IMPLICIT NONE

  INTERFACE independent
     MODULE PROCEDURE indep_scalar, indep_vector
  END INTERFACE independent

CONTAINS 
  SUBROUTINE derivative(order)
    IMPLICIT NONE
    INTEGER, INTENT (in) :: order

    order_is_2    =  order == 2
    order_is_1or2 = (order == 1) .OR. (order_is_2)
  END SUBROUTINE derivative

  SUBROUTINE indep_scalar(i, x, val)
    IMPLICIT NONE
    INTEGER,     INTENT (in)  :: i
    TYPE (func), INTENT (out) :: x
    REAL (dpk),  INTENT (in)  :: val

    IF ((i < 1) .OR. (i > n)) STOP "error in auto_deriv: indep_scalar"

    x%value = val

    IF (order_is_1or2) THEN 
       x%x    = 0.0_dpk
       x%x(i) = 1.0_dpk
    ENDIF

    IF (order_is_2) x%xx = 0.0_dpk
  END SUBROUTINE indep_scalar

  SUBROUTINE indep_vector(x, val)
    IMPLICIT NONE
    TYPE (func), DIMENSION(:), INTENT (out) :: x
    REAL (dpk),  DIMENSION(:), INTENT (in)  :: val

    INTEGER :: i

    IF (SIZE(x) /= n) STOP "error in auto_deriv: indep_vector"

    DO i=1,n
       CALL indep_scalar(i, x(i), val(i))
    ENDDO
  END SUBROUTINE indep_vector

  PURE SUBROUTINE extract(x, val, Dx, DDx)
    IMPLICIT NONE
    TYPE (func), INTENT (in) :: x
    REAL (dpk), INTENT (out) :: val
    REAL (dpk), INTENT (out), OPTIONAL :: Dx(n), DDx(nhes)

    val = x%value
    IF (PRESENT(Dx) .AND. order_is_1or2) Dx  = x%x
    IF (PRESENT(DDx) .AND. order_is_2  ) DDx = x%xx
  END SUBROUTINE extract
END MODULE ad_utilities

MODULE ad_auxiliary
  USE ad_types
  IMPLICIT NONE

  INTEGER, PRIVATE :: i,j
  INTEGER, PARAMETER :: row(nhes) = (/ ( (i, i=j,n), j=1,n) /)
  INTEGER, PARAMETER :: col(nhes) = (/ ( (j, i=j,n), j=1,n) /)

CONTAINS 
  PURE FUNCTION tensor(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in)     :: a, b
    REAL (dpk), DIMENSION (nhes) :: res

    res = a%x(col) * b%x(row)
  END FUNCTION tensor

  ! is_small is used for checking denominators in fractions.
  ELEMENTAL FUNCTION is_small(x) RESULT (res)
    IMPLICIT NONE

    REAL (dpk), INTENT (in) :: x
    LOGICAL :: res

    res = ABS(x) < TINY(x)
  END FUNCTION is_small
END MODULE ad_auxiliary

MODULE ad_assign
  USE ad_types

  IMPLICIT NONE

  INTERFACE ASSIGNMENT (=)
     MODULE PROCEDURE assig_FF, assig_FR, assig_FS, assig_FI
  END INTERFACE ASSIGNMENT (=)

  PRIVATE

  PUBLIC :: ASSIGNMENT (=)

CONTAINS
  ELEMENTAL SUBROUTINE assig_FF(res, a) ! res = a
    IMPLICIT NONE

    TYPE (func), INTENT (out) :: res
    TYPE (func), INTENT (in)  :: a

    res%value = a%value
    IF (order_is_1or2) res%x  = a%x
    IF (order_is_2)    res%xx = a%xx
  END SUBROUTINE assig_FF

  ELEMENTAL SUBROUTINE assig_FR(res, lambda)  ! res = lambda
    IMPLICIT NONE

    TYPE (func), INTENT (inout) :: res
    REAL (dpk),  INTENT (in)    :: lambda

    res%value = lambda  ! what is the correct value for the derivatives?
  END SUBROUTINE assig_FR

  ELEMENTAL SUBROUTINE assig_FS(res, lambda) ! res = lambda
    IMPLICIT NONE

    TYPE (func), INTENT (inout) :: res
    REAL (spk),  INTENT (in)    :: lambda

    res = REAL(lambda, dpk)
  END SUBROUTINE assig_FS

  ELEMENTAL SUBROUTINE assig_FI(res, lambda) ! res = lambda
    IMPLICIT NONE

    TYPE (func),  INTENT (inout) :: res
    INTEGER (ik), INTENT (in)    :: lambda

    res = REAL(lambda, dpk)
  END SUBROUTINE assig_FI

END MODULE ad_assign

MODULE ad_relational
  USE ad_types

  IMPLICIT NONE

  INTERFACE OPERATOR (<)
     MODULE PROCEDURE less_FF
     MODULE PROCEDURE less_FR, less_FS, less_FI, less_RF, less_SF, less_IF
  END INTERFACE

  INTERFACE OPERATOR (<=)
     MODULE PROCEDURE less_equal_FF
     MODULE PROCEDURE less_equal_FR, less_equal_RF
     MODULE PROCEDURE less_equal_FI, less_equal_IF
     MODULE PROCEDURE less_equal_FS, less_equal_SF
  END INTERFACE

  INTERFACE OPERATOR (>)
     MODULE PROCEDURE greater_FF 
     MODULE PROCEDURE greater_FR, greater_FS, greater_FI
     MODULE PROCEDURE greater_RF, greater_SF, greater_IF
  END INTERFACE

  INTERFACE OPERATOR (>=)
     MODULE PROCEDURE greater_equal_FR, greater_equal_RF
     MODULE PROCEDURE greater_equal_FI, greater_equal_IF
     MODULE PROCEDURE greater_equal_FF, greater_equal_SF, greater_equal_FS
  END INTERFACE

  INTERFACE OPERATOR (==)
     MODULE PROCEDURE equal_FR, equal_FI, equal_RF, equal_IF
     MODULE PROCEDURE equal_FF, equal_SF, equal_FS
  END INTERFACE

  INTERFACE OPERATOR (/=)
     MODULE PROCEDURE not_equal_FR, not_equal_FI, not_equal_RF
     MODULE PROCEDURE not_equal_IF, not_equal_FF, not_equal_SF, not_equal_FS
  END INTERFACE

  PRIVATE 
  PUBLIC :: OPERATOR (<), OPERATOR (<=), OPERATOR (>), OPERATOR (>=)
  PUBLIC :: OPERATOR (/=), OPERATOR (==)

CONTAINS
  ELEMENTAL FUNCTION less_FR(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value < lambda
  END FUNCTION less_FR

  ELEMENTAL FUNCTION less_FS(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value < REAL(lambda, dpk)
  END FUNCTION less_FS

  ELEMENTAL FUNCTION less_FI(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  INTENT (in) :: a
    INTEGER (ik), INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value < REAL(lambda, dpk)
  END FUNCTION less_FI

  ELEMENTAL FUNCTION less_RF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = REAL(lambda,dpk) < a%value
  END FUNCTION less_RF

  ELEMENTAL FUNCTION less_SF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = REAL(lambda,dpk) < a%value
  END FUNCTION less_SF

  ELEMENTAL FUNCTION less_IF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  INTENT (in) :: a
    INTEGER (ik), INTENT (in) :: lambda
    LOGICAL :: res

    res = REAL(lambda,dpk) < a%value
  END FUNCTION less_IF

  ELEMENTAL FUNCTION less_FF(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a, b
    LOGICAL :: res

    res = a%value < b%value
  END FUNCTION less_FF

  ELEMENTAL FUNCTION less_equal_FR(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value <= lambda
  END FUNCTION less_equal_FR

  ELEMENTAL FUNCTION less_equal_FS(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value <= REAL(lambda,dpk)
  END FUNCTION less_equal_FS

  ELEMENTAL FUNCTION less_equal_FI(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  INTENT (in) :: a
    INTEGER (ik), INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value <= REAL(lambda,dpk)
  END FUNCTION less_equal_FI

  ELEMENTAL FUNCTION less_equal_RF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = lambda <= a%value
  END FUNCTION less_equal_RF

  ELEMENTAL FUNCTION less_equal_SF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = REAL(lambda,dpk) <= a%value
  END FUNCTION less_equal_SF

  ELEMENTAL FUNCTION less_equal_IF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  INTENT (in) :: a
    INTEGER (ik), INTENT (in) :: lambda
    LOGICAL :: res

    res = REAL(lambda,dpk) <= a%value
  END FUNCTION less_equal_IF

  ELEMENTAL FUNCTION less_equal_FF(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a, b
    LOGICAL :: res

    res = a%value <= b%value
  END FUNCTION less_equal_FF

  ELEMENTAL FUNCTION greater_FR(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value > lambda
  END FUNCTION greater_FR

  ELEMENTAL FUNCTION greater_FS(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value > REAL(lambda,dpk)
  END FUNCTION greater_FS

  ELEMENTAL FUNCTION greater_FI(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  INTENT (in) :: a
    INTEGER (ik), INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value > REAL(lambda,dpk)
  END FUNCTION greater_FI

  ELEMENTAL FUNCTION greater_RF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = lambda > a%value
  END FUNCTION greater_RF

  ELEMENTAL FUNCTION greater_SF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = REAL(lambda,dpk) > a%value
  END FUNCTION greater_SF

  ELEMENTAL FUNCTION greater_IF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  INTENT (in) :: a
    INTEGER (ik), INTENT (in) :: lambda
    LOGICAL :: res

    res = REAL(lambda,dpk) > a%value
  END FUNCTION greater_IF

  ELEMENTAL FUNCTION greater_FF(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a, b
    LOGICAL :: res

    res = a%value > b%value
  END FUNCTION greater_FF

  ELEMENTAL FUNCTION greater_equal_FR(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value >= lambda
  END FUNCTION greater_equal_FR

  ELEMENTAL FUNCTION greater_equal_FS(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value >= REAL(lambda,dpk)
  END FUNCTION greater_equal_FS

  ELEMENTAL FUNCTION greater_equal_FI(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  INTENT (in) :: a
    INTEGER (ik), INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value >= REAL(lambda,dpk)
  END FUNCTION greater_equal_FI

  ELEMENTAL FUNCTION greater_equal_RF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = lambda >= a%value
  END FUNCTION greater_equal_RF

  ELEMENTAL FUNCTION greater_equal_SF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = REAL(lambda,dpk) >= a%value
  END FUNCTION greater_equal_SF

  ELEMENTAL FUNCTION greater_equal_IF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  INTENT (in) :: a
    INTEGER (ik), INTENT (in) :: lambda
    LOGICAL :: res

    res = REAL(lambda,dpk) >= a%value
  END FUNCTION greater_equal_IF

  ELEMENTAL FUNCTION greater_equal_FF(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a, b
    LOGICAL :: res

    res = a%value >= b%value
  END FUNCTION greater_equal_FF

  ELEMENTAL FUNCTION equal_FR(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value == lambda
  END FUNCTION equal_FR

  ELEMENTAL FUNCTION equal_FS(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value == REAL(lambda,dpk)
  END FUNCTION equal_FS

  ELEMENTAL FUNCTION equal_FI(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  INTENT (in) :: a
    INTEGER (ik), INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value == REAL(lambda,dpk)
  END FUNCTION equal_FI

  ELEMENTAL FUNCTION equal_RF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = lambda == a%value
  END FUNCTION equal_RF

  ELEMENTAL FUNCTION equal_SF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = REAL(lambda,dpk) == a%value
  END FUNCTION equal_SF

  ELEMENTAL FUNCTION equal_IF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  INTENT (in) :: a
    INTEGER (ik), INTENT (in) :: lambda
    LOGICAL :: res

    res = REAL(lambda,dpk) == a%value
  END FUNCTION equal_IF

  ELEMENTAL FUNCTION equal_FF(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a, b
    LOGICAL :: res

    res = a%value == b%value
  END FUNCTION equal_FF

  ELEMENTAL FUNCTION not_equal_FR(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value /= lambda
  END FUNCTION not_equal_FR

  ELEMENTAL FUNCTION not_equal_FS(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value /= REAL(lambda,dpk)
  END FUNCTION not_equal_FS

  ELEMENTAL FUNCTION not_equal_FI(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  INTENT (in) :: a
    INTEGER (ik), INTENT (in) :: lambda
    LOGICAL :: res

    res = a%value /= REAL(lambda,dpk)
  END FUNCTION not_equal_FI

  ELEMENTAL FUNCTION not_equal_RF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = lambda /= a%value
  END FUNCTION not_equal_RF

  ELEMENTAL FUNCTION not_equal_SF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    LOGICAL :: res

    res = REAL(lambda,dpk) /= a%value
  END FUNCTION not_equal_SF

  ELEMENTAL FUNCTION not_equal_IF(lambda, a) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  INTENT (in) :: a
    INTEGER (ik), INTENT (in) :: lambda
    LOGICAL :: res

    res = REAL(lambda,dpk) /= a%value
  END FUNCTION not_equal_IF

  ELEMENTAL FUNCTION not_equal_FF(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a, b
    LOGICAL :: res

    res = a%value /= b%value
  END FUNCTION not_equal_FF

END MODULE ad_relational


MODULE ad_operator_plus
  USE ad_types

  IMPLICIT NONE

  INTERFACE OPERATOR (+)
     MODULE PROCEDURE unary_plus
     MODULE PROCEDURE add_FF, add_FR, add_FS, add_FI, add_RF, add_SF, add_IF
  END INTERFACE

  PRIVATE 
  PUBLIC :: OPERATOR (+)

CONTAINS
  ELEMENTAL FUNCTION unary_plus(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res = a
  END FUNCTION unary_plus

  ELEMENTAL FUNCTION add_RF(lambda, a) RESULT (res)
    IMPLICIT NONE

    REAL (dpk),  INTENT (in) :: lambda
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res = a
    res%value = lambda + res%value
  END FUNCTION add_RF

  ELEMENTAL FUNCTION add_SF(lambda, a) RESULT (res)
    IMPLICIT NONE

    REAL (spk),  INTENT (in) :: lambda
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res = REAL(lambda, dpk) + a
  END FUNCTION add_SF

  ELEMENTAL FUNCTION add_IF(lambda, a) RESULT (res)
    IMPLICIT NONE

    INTEGER (ik), INTENT (in) :: lambda
    TYPE (func),  INTENT (in) :: a
    TYPE (func) :: res

    res = REAL(lambda, dpk) + a
  END FUNCTION add_IF

  ELEMENTAL FUNCTION add_FR(a, lambda) RESULT (res)
    IMPLICIT NONE

    REAL (dpk),  INTENT (in) :: lambda
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res = lambda + a
  END FUNCTION add_FR

  ELEMENTAL FUNCTION add_FS(a, lambda) RESULT (res)
    IMPLICIT NONE

    REAL (spk),  INTENT (in) :: lambda
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res = lambda + a 
  END FUNCTION add_FS

  ELEMENTAL FUNCTION add_FI(a, lambda) RESULT (res)
    IMPLICIT NONE

    INTEGER (ik), INTENT (in) :: lambda
    TYPE (func),  INTENT (in) :: a
    TYPE (func) :: res

    res = lambda + a 
  END FUNCTION add_FI

  ELEMENTAL FUNCTION add_FF(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a, b
    TYPE (func) :: res

    res%value = a%value + b%value
    IF (order_is_1or2) res%x = a%x + b%x
    IF (order_is_2)    res%xx = a%xx + b%xx
  END FUNCTION add_FF

END MODULE ad_operator_plus

MODULE ad_operator_minus
  USE ad_types
  USE ad_operator_plus

  IMPLICIT NONE

  INTERFACE OPERATOR (-)
     MODULE PROCEDURE negate
     MODULE PROCEDURE sub_FF, sub_FR, sub_FS, sub_FI, sub_RF, sub_SF, sub_IF
  END INTERFACE

  PRIVATE 
  PUBLIC :: OPERATOR (-)

CONTAINS
  ELEMENTAL FUNCTION negate(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res%value = -a%value
    IF (order_is_1or2) res%x  = -a%x
    IF (order_is_2)    res%xx = -a%xx
  END FUNCTION negate

  ELEMENTAL FUNCTION sub_RF(lambda, a) RESULT (res)
    IMPLICIT NONE

    REAL (dpk),  INTENT (in) :: lambda
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res = lambda + (-a)
  END FUNCTION sub_RF


  ELEMENTAL FUNCTION sub_SF(lambda, a) RESULT (res)
    IMPLICIT NONE

    REAL (spk),  INTENT (in) :: lambda
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res = lambda + (-a)
  END FUNCTION sub_SF


  ELEMENTAL FUNCTION sub_IF(lambda, a) RESULT (res)
    IMPLICIT NONE

    INTEGER (ik), INTENT (in) :: lambda
    TYPE (func),  INTENT (in) :: a
    TYPE (func) :: res

    res = lambda + (-a)
  END FUNCTION sub_IF

  ELEMENTAL FUNCTION sub_FR(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    TYPE (func) :: res

    res = a + (-lambda)
  END FUNCTION sub_FR

  ELEMENTAL FUNCTION sub_FS(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    TYPE (func) :: res

    res = a + (-lambda)
  END FUNCTION sub_FS

  ELEMENTAL FUNCTION sub_FI(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  INTENT (in) :: a
    INTEGER (ik), INTENT (in) :: lambda
    TYPE (func) :: res

    res = a + (-lambda)
  END FUNCTION sub_FI

  ELEMENTAL FUNCTION sub_FF(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a, b
    TYPE (func) :: res

    res = a + (-b)
  END FUNCTION sub_FF

END MODULE ad_operator_minus

MODULE ad_operator_star
  USE ad_types
  USE ad_auxiliary

  IMPLICIT NONE

  INTERFACE OPERATOR (*)
     MODULE PROCEDURE mul_FF, mul_FR, mul_FS, mul_FI, mul_RF, mul_SF, mul_IF
  END INTERFACE

  PRIVATE 
  PUBLIC :: OPERATOR (*)

CONTAINS
  ELEMENTAL FUNCTION mul_RF(lambda, a) RESULT (res)
    IMPLICIT NONE

    REAL (dpk),  INTENT (in) :: lambda
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res%value = lambda * a%value
    IF (order_is_1or2) res%x  = lambda * a%x
    IF (order_is_2)    res%xx = lambda * a%xx
  END FUNCTION mul_RF

  ELEMENTAL FUNCTION mul_SF(lambda, a) RESULT (res)
    IMPLICIT NONE

    REAL (spk),  INTENT (in) :: lambda
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res = REAL(lambda, dpk) * a
  END FUNCTION mul_SF

  ELEMENTAL FUNCTION mul_IF(lambda, a) RESULT (res)
    IMPLICIT NONE

    INTEGER (ik), INTENT (in) :: lambda
    TYPE (func),  INTENT (in) :: a
    TYPE (func) :: res

    res = REAL(lambda, dpk) * a
  END FUNCTION mul_IF

  ELEMENTAL FUNCTION mul_FR(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    TYPE (func) :: res

    res = lambda * a
  END FUNCTION mul_FR

  ELEMENTAL FUNCTION mul_FS(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    TYPE (func) :: res

    res = lambda * a
  END FUNCTION mul_FS

  ELEMENTAL FUNCTION mul_FI(a, lambda) RESULT (res)
    IMPLICIT NONE

    INTEGER (ik), INTENT (in) :: lambda
    TYPE (func),  INTENT (in) :: a
    TYPE (func) :: res

    res = lambda * a
  END FUNCTION mul_FI

  ELEMENTAL FUNCTION mul_FF(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a, b
    TYPE (func) :: res

    res%value = a%value * b%value

    IF (order_is_1or2) res%x = a%value * b%x + b%value * a%x

    IF (order_is_2) THEN
       res%xx = a%value * b%xx + tensor(a,b) + tensor(b,a) + b%value * a%xx
    ENDIF
  END FUNCTION mul_FF

END MODULE ad_operator_star

MODULE ad_operator_slash
  USE ad_types
  USE ad_operator_star
  USE ad_auxiliary

  IMPLICIT NONE

  INTERFACE OPERATOR (/)
     MODULE PROCEDURE div_FF, div_FR, div_FS, div_FI, div_RF, div_SF, div_IF 
  END INTERFACE

  PRIVATE 
  PUBLIC :: OPERATOR (/)

CONTAINS
  ELEMENTAL FUNCTION div_FR(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    TYPE (func) :: res

    res = (1.0_dpk / lambda) * a
  END FUNCTION div_FR

  ELEMENTAL FUNCTION div_FS(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    TYPE (func) :: res

    res = (1.0_dpk / REAL(lambda,dpk)) * a  
  END FUNCTION div_FS

  ELEMENTAL FUNCTION div_FI(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  INTENT (in) :: a
    INTEGER (ik), INTENT (in) :: lambda
    TYPE (func) :: res

    res = (1.0_dpk / REAL(lambda,dpk)) * a  
  END FUNCTION div_FI

  ELEMENTAL FUNCTION div_RF(lambda, a) RESULT (res)
    IMPLICIT NONE

    REAL (dpk),  INTENT (in) :: lambda
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res%value = lambda / a%value
    IF (order_is_1or2) res%x = (-res%value / a%value) * a%x

    IF (order_is_2) THEN
       res%xx = -( res%value * a%xx + 2.0_dpk * tensor(res,a) ) / a%value
    ENDIF
  END FUNCTION div_RF

  ELEMENTAL FUNCTION div_SF(lambda, a) RESULT (res)
    IMPLICIT NONE

    REAL (spk), INTENT (in) :: lambda
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res = REAL(lambda, dpk) / a
  END FUNCTION div_SF

  ELEMENTAL FUNCTION div_IF(lambda, a) RESULT (res)
    IMPLICIT NONE

    INTEGER (ik), INTENT (in) :: lambda
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res = REAL(lambda, dpk) / a
  END FUNCTION div_IF

  ELEMENTAL FUNCTION div_FF(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a, b
    TYPE (func) :: res

    res = a * (1.0_dpk / b)
  END FUNCTION div_FF

END MODULE ad_operator_slash

MODULE ad_fortran_library
  USE ad_types
  USE ad_relational
  USE ad_assign
  USE ad_operator_plus
  USE ad_operator_minus
  USE ad_operator_star
  USE ad_operator_slash
  USE ad_auxiliary

  USE IEEEx_EXCEPTIONS

  IMPLICIT NONE

  INTERFACE abs
     MODULE PROCEDURE abs_
  END INTERFACE

  INTERFACE acos
     MODULE PROCEDURE acos_
  END INTERFACE

  INTERFACE aint
     MODULE PROCEDURE aint_
  END INTERFACE

  INTERFACE anint
     MODULE PROCEDURE anint_
  END INTERFACE

  INTERFACE asin
     MODULE PROCEDURE asin_
  END INTERFACE

  INTERFACE atan
     MODULE PROCEDURE atan_
  END INTERFACE

  INTERFACE atan2
     MODULE PROCEDURE atan2_FF_, atan2_RF_, atan2_FR_, atan2_SF_, atan2_FS_
  END INTERFACE

  INTERFACE ceiling
     MODULE PROCEDURE ceiling_
  END INTERFACE

  INTERFACE cos
     MODULE PROCEDURE cos_
  END INTERFACE

  INTERFACE cosh
     MODULE PROCEDURE cosh_
  END INTERFACE

  INTERFACE digits
     MODULE PROCEDURE digits_
  END INTERFACE

  INTERFACE dim
     MODULE PROCEDURE dim_
  END INTERFACE

  INTERFACE dot_product
     MODULE PROCEDURE dot_product_FF_
     MODULE PROCEDURE dot_product_RF_, dot_product_SF_, dot_product_IF_
     MODULE PROCEDURE dot_product_FR_, dot_product_FS_, dot_product_FI_
  END INTERFACE

  INTERFACE epsilon
     MODULE PROCEDURE epsilon_
  END INTERFACE

  INTERFACE exp
     MODULE PROCEDURE exp_
  END INTERFACE

  INTERFACE exponent
     MODULE PROCEDURE exponent_
  END INTERFACE

  INTERFACE floor
     MODULE PROCEDURE floor_
  END INTERFACE

  INTERFACE fraction
     MODULE PROCEDURE fraction_
  END INTERFACE

  INTERFACE huge
     MODULE PROCEDURE huge_
  END INTERFACE

  INTERFACE int
     MODULE PROCEDURE int_
  END INTERFACE

  INTERFACE kind
     MODULE PROCEDURE kind_
  END INTERFACE

  INTERFACE log
     MODULE PROCEDURE log_
  END INTERFACE

  INTERFACE log10
     MODULE PROCEDURE log10_
  END INTERFACE

  INTERFACE matmul
     MODULE PROCEDURE matmul_FF_12_
     MODULE PROCEDURE matmul_RF_12_, matmul_SF_12_, matmul_IF_12_ 
     MODULE PROCEDURE matmul_FR_12_, matmul_FS_12_, matmul_FI_12_

     MODULE PROCEDURE matmul_FF_21_
     MODULE PROCEDURE matmul_RF_21_, matmul_SF_21_, matmul_IF_21_
     MODULE PROCEDURE matmul_FR_21_, matmul_FS_21_, matmul_FI_21_

     MODULE PROCEDURE matmul_FF_22_
     MODULE PROCEDURE matmul_RF_22_, matmul_SF_22_, matmul_IF_22_
     MODULE PROCEDURE matmul_FR_22_, matmul_FS_22_, matmul_FI_22_
  END INTERFACE

  INTERFACE max
     MODULE PROCEDURE max2_FF_, max2_RF_, max2_FR_, max2_SF_, max2_FS_, max3_
  END INTERFACE

  INTERFACE maxexponent
     MODULE PROCEDURE maxexponent_
  END INTERFACE

  INTERFACE maxloc
     MODULE PROCEDURE maxloc_1, maxloc__dim_1, maxloc__mask_1
     MODULE PROCEDURE maxloc__dim_mask_1
  END INTERFACE

  INTERFACE maxval
     MODULE PROCEDURE maxval_1
  END INTERFACE

  INTERFACE min
     MODULE PROCEDURE min2_FF_, min2_RF_, min2_FR_, min2_SF_, min2_FS_, min3_
  END INTERFACE

  INTERFACE minexponent
     MODULE PROCEDURE minexponent_
  END INTERFACE

  INTERFACE minloc
     MODULE PROCEDURE minloc_1, minloc__dim_1, minloc__mask_1
     MODULE PROCEDURE minloc__dim_mask_1
  END INTERFACE

  INTERFACE minval
     MODULE PROCEDURE minval_1
  END INTERFACE

  INTERFACE mod
     MODULE PROCEDURE mod_FF_, mod_RF_, mod_FR_
  END INTERFACE

  INTERFACE modulo
     MODULE PROCEDURE modulo_FR_, modulo_RF_, modulo_FF_
  END INTERFACE

  INTERFACE nearest
     MODULE PROCEDURE nearest_FF_, nearest_FR_, nearest_RF_
     MODULE PROCEDURE nearest_FS_, nearest_SF_
  END INTERFACE

  INTERFACE nint
     MODULE PROCEDURE nint_
  END INTERFACE

  INTERFACE PRECISION
     MODULE PROCEDURE precision_
  END INTERFACE

  INTERFACE product
     MODULE PROCEDURE product_1
  END INTERFACE

  INTERFACE radix
     MODULE PROCEDURE radix_
  END INTERFACE

  INTERFACE range
     MODULE PROCEDURE range_
  END INTERFACE

  INTERFACE rrspacing
     MODULE PROCEDURE rrspacing_
  END INTERFACE

  INTERFACE scale
     MODULE PROCEDURE scale_
  END INTERFACE

  INTERFACE set_exponent
     MODULE PROCEDURE set_exponent_
  END INTERFACE

  INTERFACE sign
     MODULE PROCEDURE sign_RF_, sign_FR_, sign_FF_
  END INTERFACE

  INTERFACE sin
     MODULE PROCEDURE sin_
  END INTERFACE

  INTERFACE sinh
     MODULE PROCEDURE sinh_
  END INTERFACE

  INTERFACE spacing
     MODULE PROCEDURE spacing_
  END INTERFACE

  INTERFACE sqrt
     MODULE PROCEDURE sqrt_
  END INTERFACE

  INTERFACE sum
     MODULE PROCEDURE sum_1
  END INTERFACE

  INTERFACE tan
     MODULE PROCEDURE tan_
  END INTERFACE

  INTERFACE tanh
     MODULE PROCEDURE tanh_
  END INTERFACE

  INTERFACE tiny
     MODULE PROCEDURE tiny_
  END INTERFACE

  PRIVATE 
  PUBLIC :: abs, acos, aint, anint, asin, atan, atan2, ceiling, cos, cosh
  PUBLIC :: digits, dim, dot_product, epsilon, exp, exponent, floor, fraction
  PUBLIC :: huge, int, log, log10, matmul, max, maxexponent, maxloc, maxval
  PUBLIC :: min, minexponent, minloc, minval, mod, modulo, nearest, nint
  PUBLIC :: precision, product, radix, range, rrspacing, scale, set_exponent
  PUBLIC :: sign, sin, sinh, spacing, sqrt, sum, tan, tanh, tiny, kind

CONTAINS
  ELEMENTAL FUNCTION abs_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res = a
    IF (a%value < 0.0_dpk) res = -res

    IF (a%value == 0.0_dpk) CALL IEEE_SET_FLAG(IEEE_INVALID, .TRUE.)
    ! discontinuous function.
  END FUNCTION abs_

  ELEMENTAL FUNCTION acos_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    REAL (dpk)  :: sin_

    res%value = ACOS(a%value)

    IF (order_is_1or2) THEN 
       sin_ = SIN(res%value)
       IF (is_small(sin_)) CALL IEEE_SET_FLAG(IEEE_DIVIDE_BY_ZERO, .TRUE.)

       res%x = -a%x / sin_
    END IF

    IF (order_is_2) res%xx = -(a%xx + a%value * tensor(res, res)) / sin_
  END FUNCTION acos_

  ELEMENTAL FUNCTION aint_(a) RESULT (res) 
    ! optional argument kind cannot be implemented
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk) :: res

    res = AINT(a%value)
  END FUNCTION aint_

  ELEMENTAL FUNCTION anint_(a) RESULT (res) 
    ! optional argument kind cannot be implemented
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk) :: res

    res = ANINT(a%value)
  END FUNCTION anint_

  ELEMENTAL FUNCTION asin_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    REAL (dpk) :: cos_

    res%value = ASIN(a%value)

    IF (order_is_1or2) THEN
       cos_ = COS(res%value)
       IF (is_small(cos_)) CALL IEEE_SET_FLAG(IEEE_DIVIDE_BY_ZERO, .TRUE.)

       res%x = a%x / cos_
    END IF

    IF (order_is_2) res%xx = (a%xx + a%value * tensor(res, res)) / cos_
  END FUNCTION asin_

  ELEMENTAL FUNCTION atan_(a) RESULT (res)
    IMPLICIT NONE
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    REAL (dpk) :: cos2

    res%value = ATAN(a%value)
    IF (order_is_1or2) THEN
       cos2  = 1.0_dpk / (1.0_dpk + a%value**2) ! COS(res%value)**2  
       res%x = cos2 * a%x
    ENDIF

    IF (order_is_2) THEN
!    res%xx = -SIN(2.0_dpk * res%value) * tensor(a,res) + cos2 * a%xx
!    res%xx = -2.0_dpk * SIN(res%value) * COS(res%value) * tensor(a,res) + cos2 * a%xx
!    res%xx = cos2 * (-2.0_dpk * TAN(res%value) * tensor(a,res) + a%xx)
!    res%xx = -2.0_dpk * a%value * cos2 * tensor(a,res) + cos2 * a%xx
       res%xx = -2.0_dpk * a%value * tensor(res,res) + cos2 * a%xx
    ENDIF
  END FUNCTION atan_

  ELEMENTAL FUNCTION atan2_FF_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a, b
    TYPE (func) :: res

    IF (is_small(b%value)) CALL IEEE_SET_FLAG(IEEE_DIVIDE_BY_ZERO, .TRUE.)

    res = ATAN(a / b)
    res%value = ATAN2(a%value, b%value)
  END FUNCTION atan2_FF_

  ELEMENTAL FUNCTION atan2_RF_(a_, b) RESULT (res)
    IMPLICIT NONE

    REAL (dpk),  INTENT (in) :: a_
    TYPE (func), INTENT (in) :: b
    TYPE (func) :: res

    TYPE (func) :: a

    a = func(a_, 0.0_dpk, 0.0_dpk)
    res = ATAN2(a,b)
  END FUNCTION atan2_RF_

  ELEMENTAL FUNCTION atan2_FR_(a, b_) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: b_
    TYPE (func) :: res

    TYPE (func) :: b 

    b = func(b_, 0.0_dpk, 0.0_dpk)
    res = ATAN2(a,b)
  END FUNCTION atan2_FR_

  ELEMENTAL FUNCTION atan2_SF_(a, b) RESULT (res)
    IMPLICIT NONE

    REAL (spk),  INTENT (in) :: a
    TYPE (func), INTENT (in) :: b
    TYPE (func) :: res

    res = ATAN2(REAL(a,dpk), b)
  END FUNCTION atan2_SF_

  ELEMENTAL FUNCTION atan2_FS_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: b
    TYPE (func) :: res

    res = ATAN2(a, REAL(b,dpk))
  END FUNCTION atan2_FS_

  ELEMENTAL FUNCTION ceiling_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    INTEGER :: res

    res = CEILING(a%value)
  END FUNCTION ceiling_

  ELEMENTAL FUNCTION cos_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    REAL (dpk) :: minus_sin

    res%value = COS(a%value)
    IF (order_is_1or2) THEN
       minus_sin = -SIN(a%value)
       res%x = minus_sin * a%x
    ENDIF

    IF (order_is_2) res%xx = minus_sin * a%xx - res%value * tensor(a,a)
  END FUNCTION cos_

  ELEMENTAL FUNCTION cosh_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    REAL (dpk) :: sinha 

    res%value = COSH(a%value)

    IF (order_is_1or2) THEN 
       sinha = SINH(a%value)
       res%x  = sinha * a%x
    ENDIF
    IF (order_is_2)  res%xx = res%value * tensor(a,a) + sinha * a%xx
  END FUNCTION cosh_

  ELEMENTAL FUNCTION digits_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    INTEGER :: res

    res = DIGITS(a%value)
  END FUNCTION digits_

  ELEMENTAL FUNCTION dim_(x, y) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: x, y
    TYPE (func) :: res

    res = func(0.0_dpk, 0.0_dpk, 0.0_dpk)
    IF (x > y) res = x - y
  END FUNCTION dim_

  PURE FUNCTION dot_product_FF_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:), INTENT (in) :: a, b
    TYPE (func) :: res

    INTEGER :: i

    res = a(1) * b(1)
    DO i = 2, SIZE(a)
       res = res + a(i) * b(i)
    ENDDO
  END FUNCTION dot_product_FF_

  PURE FUNCTION dot_product_RF_(lambda, b) RESULT (res)
    IMPLICIT NONE

    REAL (dpk),  DIMENSION (:), INTENT (in) :: lambda
    TYPE (func), DIMENSION (:), INTENT (in) :: b
    TYPE (func) :: res

    INTEGER :: i

    res%value = DOT_PRODUCT(lambda, b%value)
    IF (order_is_1or2) FORALL (i=1:n)    res%x(i) =DOT_PRODUCT(lambda, b%x(i))
    IF (order_is_2)    FORALL (i=1:nhes) res%xx(i)=DOT_PRODUCT(lambda, b%xx(i))

!!%
!!%    res = 0.0_dpk
!!%    DO i = 1, SIZE(lambda)
!!%       res = res + lambda(i) * b(i)
!!%    ENDDO
  END FUNCTION dot_product_RF_

  PURE FUNCTION dot_product_SF_(a, b) RESULT (res)
    IMPLICIT NONE

    REAL (spk),  DIMENSION (:), INTENT (in) :: a
    TYPE (func), DIMENSION (:), INTENT (in) :: b
    TYPE (func) :: res

    res = DOT_PRODUCT(REAL(a,dpk), b)
  END FUNCTION dot_product_SF_

  PURE FUNCTION dot_product_IF_(a, b) RESULT (res)
    IMPLICIT NONE

    INTEGER (ik), DIMENSION (:), INTENT (in) :: a
    TYPE (func),  DIMENSION (:), INTENT (in) :: b
    TYPE (func) :: res

    res = DOT_PRODUCT(REAL(a,dpk), b)
  END FUNCTION dot_product_IF_

  PURE FUNCTION dot_product_FR_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:), INTENT (in) :: a
    REAL (dpk),  DIMENSION (:), INTENT (in) :: b
    TYPE (func) :: res

    res = DOT_PRODUCT(b, a)
  END FUNCTION dot_product_FR_

  PURE FUNCTION dot_product_FS_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:), INTENT (in) :: a
    REAL (spk),  DIMENSION (:), INTENT (in) :: b
    TYPE (func) :: res

    res = DOT_PRODUCT(b, a)
  END FUNCTION dot_product_FS_

  PURE FUNCTION dot_product_FI_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  DIMENSION (:), INTENT (in) :: a
    INTEGER (ik), DIMENSION (:), INTENT (in) :: b
    TYPE (func) :: res

    res = DOT_PRODUCT(b, a)
  END FUNCTION dot_product_FI_

  ELEMENTAL FUNCTION epsilon_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk) :: res

    res = EPSILON(a%value)
  END FUNCTION epsilon_

  ELEMENTAL FUNCTION exp_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res%value = EXP(a%value)
    IF (order_is_1or2) res%x = res%value * a%x
    IF (order_is_2)   res%xx = res%value * a%xx + tensor(a,res)
  END FUNCTION exp_

  ELEMENTAL FUNCTION exponent_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    INTEGER :: res

    res = EXPONENT(a%value)
  END FUNCTION exponent_

  ELEMENTAL FUNCTION floor_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    INTEGER :: res

    res = FLOOR(a%value)
  END FUNCTION floor_

  ELEMENTAL FUNCTION fraction_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk) :: res

    res = FRACTION(a%value)
  END FUNCTION fraction_

  ELEMENTAL FUNCTION huge_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk) :: res

    res = HUGE(a%value)
  END FUNCTION huge_

  ELEMENTAL FUNCTION int_(a) RESULT (res) 
    ! optional argument kind cannot be implemented
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    INTEGER :: res

    res = INT(a%value)
  END FUNCTION int_

  ELEMENTAL FUNCTION kind_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    INTEGER :: res

    res = KIND(a%value)     ! by default = dpk
  END FUNCTION kind_

  ELEMENTAL FUNCTION log_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res%value = LOG(a%value)
    IF (order_is_1or2) res%x  = a%x / a%value
    IF (order_is_2)    res%xx = a%xx / a%value - tensor(res, res)
  END FUNCTION log_

  ELEMENTAL FUNCTION log10_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res = LOG(a) / LOG(10.0_dpk)
  END FUNCTION log10_

  PURE FUNCTION matmul_FF_12_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:),    INTENT (in) :: a
    TYPE (func), DIMENSION (:, :), INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(b, 2)) :: res

    INTEGER :: i

    res%value = MATMUL(a%value, b%value)

    IF (order_is_1or2) THEN
       FORALL (i = 1:n) &
            res%x(i) = MATMUL(a%x(i), b%value) + MATMUL(a%value, b%x(i)) 
    END IF

    IF (order_is_2) THEN
       FORALL (i=1:nhes) res%xx(i) = &
            MATMUL(a%xx(i), b%value) + &
            MATMUL(a%x(col(i)), b%x(row(i))) + & ! tensor
            MATMUL(a%value, b%xx(i))
    END IF
  END FUNCTION matmul_FF_12_

  PURE FUNCTION matmul_RF_12_(lambda, b) RESULT (res)
    IMPLICIT NONE

    REAL (dpk),  DIMENSION (:),    INTENT (in) :: lambda
    TYPE (func), DIMENSION (:, :), INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(b, 2)) :: res

    INTEGER :: i

    res%value = MATMUL(lambda, b%value)

    IF (order_is_1or2) FORALL(i=1:n)     res%x(i)  = MATMUL(lambda, b%x(i)) 
    IF (order_is_2)    FORALL (i=1:nhes) res%xx(i) = MATMUL(lambda, b%xx(i))
  END FUNCTION matmul_RF_12_

  PURE FUNCTION matmul_SF_12_(lambda, b) RESULT (res)
    IMPLICIT NONE

    REAL (spk),  DIMENSION (:),    INTENT (in) :: lambda
    TYPE (func), DIMENSION (:, :), INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(b, 2)) :: res

    res = MATMUL(REAL(lambda,dpk), b)
  END FUNCTION matmul_SF_12_

  PURE FUNCTION matmul_IF_12_(lambda, b) RESULT (res)
    IMPLICIT NONE

    INTEGER (ik), DIMENSION (:),    INTENT (in) :: lambda
    TYPE (func),  DIMENSION (:, :), INTENT (in) :: b
    TYPE (func),  DIMENSION (SIZE(b, 2)) :: res

    res = MATMUL(REAL(lambda,dpk), b)
  END FUNCTION matmul_IF_12_

  PURE FUNCTION matmul_FR_12_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:),    INTENT (in) :: a
    REAL (dpk),  DIMENSION (:, :), INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(b, 2)) :: res

    INTEGER :: i

    res%value = MATMUL(a%value, b)

    IF (order_is_1or2) FORALL(i=1:n)    res%x(i)  = MATMUL(a%x(i), b)
    IF (order_is_2)    FORALL(i=1:nhes) res%xx(i) = MATMUL(a%xx(i), b)
  END FUNCTION matmul_FR_12_

  PURE FUNCTION matmul_FS_12_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:),    INTENT (in) :: a
    REAL (spk),  DIMENSION (:, :), INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(b, 2)) :: res

    res = MATMUL(a, REAL(b,dpk))
  END FUNCTION matmul_FS_12_

  PURE FUNCTION matmul_FI_12_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:),     INTENT (in) :: a
    INTEGER (ik), DIMENSION (:, :), INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(b, 2)) :: res

    res = MATMUL(a, REAL(b,dpk))
  END FUNCTION matmul_FI_12_

  PURE FUNCTION matmul_FF_21_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:, :), INTENT (in) :: a
    TYPE (func), DIMENSION (:), INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(a, 1)) :: res

    INTEGER :: i

    res%value = MATMUL(a%value, b%value)

    IF (order_is_1or2) THEN
       FORALL (i = 1:n) &
            res%x(i) = MATMUL(a%x(i), b%value) + MATMUL(a%value, b%x(i)) 
    END IF

    IF (order_is_2) THEN
       FORALL (i=1:nhes) res%xx(i) = &
            MATMUL(a%xx(i), b%value) + &
            MATMUL(a%x(col(i)), b%x(row(i))) + & ! tensor
            MATMUL(a%value, b%xx(i))
    END IF
  END FUNCTION matmul_FF_21_

  PURE FUNCTION matmul_RF_21_(a, b) RESULT (res)
    IMPLICIT NONE

    REAL (dpk),  DIMENSION (:, :), INTENT (in) :: a
    TYPE (func), DIMENSION (:),    INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(a, 1)) :: res

    INTEGER :: i

    res%value = MATMUL(a, b%value)

    IF (order_is_1or2) FORALL(i=1:n)    res%x(i)  = MATMUL(a, b%x(i))  
    IF (order_is_2)    FORALL(i=1:nhes) res%xx(i) = MATMUL(a, b%xx(i))
  END FUNCTION matmul_RF_21_

  PURE FUNCTION matmul_SF_21_(a, b) RESULT (res)
    IMPLICIT NONE

    REAL (spk),  DIMENSION (:, :), INTENT (in) :: a
    TYPE (func), DIMENSION (:),    INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(a, 1)) :: res

    res = MATMUL(REAL(a,dpk), b)
  END FUNCTION matmul_SF_21_

  PURE FUNCTION matmul_IF_21_(a, b) RESULT (res)
    IMPLICIT NONE

    INTEGER (ik), DIMENSION (:, :), INTENT (in) :: a
    TYPE (func),  DIMENSION (:),    INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(a, 1)) :: res

    res = MATMUL(REAL(a,dpk), b)
  END FUNCTION matmul_IF_21_

  PURE FUNCTION matmul_FR_21_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:, :), INTENT (in) :: a
    REAL (dpk),  DIMENSION (:),    INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(a, 1)) :: res

    INTEGER :: i

    res%value = MATMUL(a%value, b)

    IF (order_is_1or2) FORALL (i=1:n)    res%x(i)  = MATMUL(a%x(i), b) 
    IF (order_is_2)    FORALL (i=1:nhes) res%xx(i) = MATMUL(a%xx(i), b) 
  END FUNCTION matmul_FR_21_

  PURE FUNCTION matmul_FS_21_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:, :), INTENT (in) :: a
    REAL (spk),  DIMENSION (:),    INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(a, 1)) :: res

    res = MATMUL(a, REAL(b,dpk))
  END FUNCTION matmul_FS_21_

  PURE FUNCTION matmul_FI_21_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  DIMENSION (:, :), INTENT (in) :: a
    INTEGER (ik), DIMENSION (:),    INTENT (in) :: b
    TYPE (func),  DIMENSION (SIZE(a, 1)) :: res

    res = MATMUL(a, REAL(b,dpk))
  END FUNCTION matmul_FI_21_

  PURE FUNCTION matmul_FF_22_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:, :), INTENT (in) :: a
    TYPE (func), DIMENSION (:, :), INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(a, 1), SIZE(b, 2)) :: res

    INTEGER :: i

    res%value = MATMUL(a%value, b%value)

    IF (order_is_1or2) THEN
       FORALL (i=1:n) &
            res%x(i) = MATMUL(a%x(i), b%value) + MATMUL(a%value, b%x(i)) 
    END IF

    IF (order_is_2) THEN
       FORALL (i=1:nhes) res%xx(i) = &
            MATMUL(a%xx(i), b%value) + &
            MATMUL(a%x(col(i)), b%x(row(i))) + & ! tensor
            MATMUL(a%value, b%xx(i))
    END IF
  END FUNCTION matmul_FF_22_

  PURE FUNCTION matmul_RF_22_(a, b) RESULT (res)
    IMPLICIT NONE

    REAL (dpk),  DIMENSION (:, :), INTENT (in) :: a
    TYPE (func), DIMENSION (:, :), INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(a, 1), SIZE(b, 2)) :: res

    INTEGER :: i

    res%value = MATMUL(a, b%value)

    IF (order_is_1or2) FORALL (i=1:n)    res%x(i)  = MATMUL(a, b%x(i)) 
    IF (order_is_2)    FORALL (i=1:nhes) res%xx(i) = MATMUL(a, b%xx(i))

  END FUNCTION matmul_RF_22_

  PURE FUNCTION matmul_SF_22_(a, b) RESULT (res)
    IMPLICIT NONE

    REAL (spk),  DIMENSION (:, :), INTENT (in) :: a
    TYPE (func), DIMENSION (:, :), INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(a, 1), SIZE(b, 2)) :: res

    res = MATMUL(REAL(a, dpk), b)
  END FUNCTION matmul_SF_22_

  PURE FUNCTION matmul_IF_22_(a, b) RESULT (res)
    IMPLICIT NONE

    INTEGER (ik), DIMENSION (:, :), INTENT (in) :: a
    TYPE (func),  DIMENSION (:, :), INTENT (in) :: b
    TYPE (func),  DIMENSION (SIZE(a, 1), SIZE(b, 2)) :: res

    res = MATMUL(REAL(a, dpk), b)
  END FUNCTION matmul_IF_22_

  PURE FUNCTION matmul_FR_22_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:, :), INTENT (in) :: a
    REAL (dpk),  DIMENSION (:, :), INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(a, 1), SIZE(b, 2)) :: res

    INTEGER :: i

    res%value = MATMUL(a%value, b)

    IF (order_is_1or2) FORALL (i=1:n)    res%x(i)  = MATMUL(a%x(i),  b)
    IF (order_is_2)    FORALL (i=1:nhes) res%xx(i) = MATMUL(a%xx(i), b)
  END FUNCTION matmul_FR_22_

  PURE FUNCTION matmul_FS_22_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:, :), INTENT (in) :: a
    REAL (spk),  DIMENSION (:, :), INTENT (in) :: b
    TYPE (func), DIMENSION (SIZE(a, 1), SIZE(b, 2)) :: res

    res = MATMUL(a, REAL(b,dpk))

  END FUNCTION matmul_FS_22_

  PURE FUNCTION matmul_FI_22_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func),  DIMENSION (:, :), INTENT (in) :: a
    INTEGER (ik), DIMENSION (:, :), INTENT (in) :: b
    TYPE (func),  DIMENSION (SIZE(a, 1), SIZE(b, 2)) :: res

    res = MATMUL(a, REAL(b,dpk))

  END FUNCTION matmul_FI_22_

  ELEMENTAL FUNCTION max2_FF_(a1, a2) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a1
    TYPE (func), INTENT (in) :: a2
    TYPE (func) :: res

    IF (a1 >= a2) THEN 
       res = a1
    ELSE
       res = a2
    END IF
  END FUNCTION max2_FF_

  ELEMENTAL FUNCTION max2_FR_(a1, a2) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a1
    REAL (dpk),  INTENT (in) :: a2
    TYPE (func) :: res

    res = MAX(a1, func(a2, 0.0_dpk, 0.0_dpk))
  END FUNCTION max2_FR_

  ELEMENTAL FUNCTION max2_RF_(a1, a2) RESULT (res)
    IMPLICIT NONE

    REAL (dpk),  INTENT (in) :: a1
    TYPE (func), INTENT (in) :: a2
    TYPE (func) :: res

    res = MAX(a2, a1)
  END FUNCTION max2_RF_

  ELEMENTAL FUNCTION max2_FS_(a1, a2) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a1
    REAL (spk),  INTENT (in) :: a2
    TYPE (func) :: res

    res = MAX(a1, REAL(a2,dpk))
  END FUNCTION max2_FS_

  ELEMENTAL FUNCTION max2_SF_(a1, a2) RESULT (res)
    IMPLICIT NONE

    REAL (spk),  INTENT (in) :: a1
    TYPE (func), INTENT (in) :: a2
    TYPE (func) :: res

    res = MAX(a2, a1)
  END FUNCTION max2_SF_

  ELEMENTAL FUNCTION max3_(a1, a2, a3) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a1, a2, a3
    TYPE (func) :: res

    res = MAX(a1, MAX(a2,a3))
  END FUNCTION max3_

  ELEMENTAL FUNCTION maxexponent_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    INTEGER :: res

    res = MAXEXPONENT(a%value)
  END FUNCTION maxexponent_

  PURE FUNCTION maxloc_1(a) RESULT (res) 
    IMPLICIT NONE

    TYPE (func), DIMENSION (:), INTENT (in) :: a
    INTEGER, DIMENSION (SIZE(SHAPE(a))) :: res

    res = MAXLOC(a%value)
  END FUNCTION maxloc_1

  PURE FUNCTION maxloc__dim_1(a, dim) RESULT (res) ! F95 interface
    IMPLICIT NONE

    TYPE (func), DIMENSION (:), INTENT (in) :: a
    INTEGER, INTENT (in) :: dim   ! not optional
    INTEGER, DIMENSION (SIZE(SHAPE(a))) :: res

    res = MAXLOC(a%value, dim)
  END FUNCTION maxloc__dim_1

  PURE FUNCTION maxloc__mask_1(a, mask) RESULT (res) ! F90 interface
    IMPLICIT NONE

    TYPE (func), DIMENSION (:), INTENT (in) :: a
    LOGICAL, DIMENSION (:), INTENT (in) :: mask   ! not optional
    INTEGER, DIMENSION (SIZE(SHAPE(a))) :: res

    res = MAXLOC(a%value, mask)
  END FUNCTION maxloc__mask_1

  PURE FUNCTION maxloc__dim_mask_1(a, dim, mask) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:), INTENT (in) :: a
    INTEGER, INTENT (in) :: dim
    LOGICAL, DIMENSION (:), INTENT (in) :: mask
    INTEGER, DIMENSION (SIZE(SHAPE(a))) :: res

    res = MAXLOC(a%value, dim, mask)  
  END FUNCTION maxloc__dim_mask_1

  PURE FUNCTION maxval_1(a, dim, mask) RESULT (res) 
    IMPLICIT NONE

    TYPE (func), DIMENSION (:), INTENT (in) :: a 
    INTEGER, INTENT (in), OPTIONAL :: dim
    LOGICAL, DIMENSION (:), INTENT (in), OPTIONAL :: mask ! same rank with a
    TYPE (func) :: res   ! res is scalar

    INTEGER :: ind(SIZE(SHAPE(a)))
    INTEGER :: mydim
    LOGICAL, DIMENSION (SIZE(a)) :: mymask

    mydim = 1
    IF (PRESENT(dim)) mydim = dim

    mymask = .TRUE.
    IF (PRESENT(mask)) mymask = mask

    ind = MAXLOC(a, mydim, mymask)

    res = a(ind(1))
  END FUNCTION maxval_1

  ELEMENTAL FUNCTION min2_FF_(a1, a2) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a1, a2
    TYPE (func) :: res

    IF (a1 <= a2) res = a1
    IF (a2 <= a1) res = a2
  END FUNCTION min2_FF_

  ELEMENTAL FUNCTION min2_FR_(a1, a2) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a1
    REAL (dpk),  INTENT (in) :: a2
    TYPE (func) :: res

    res = MIN(a1, func(a2, 0.0_dpk, 0.0_dpk))
  END FUNCTION min2_FR_

  ELEMENTAL FUNCTION min2_RF_(a1, a2) RESULT (res)
    IMPLICIT NONE

    REAL (dpk),  INTENT (in) :: a1
    TYPE (func), INTENT (in) :: a2
    TYPE (func) :: res

    res = MIN(a2, a1)
  END FUNCTION min2_RF_

  ELEMENTAL FUNCTION min2_FS_(a1, a2) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a1
    REAL (spk),  INTENT (in) :: a2
    TYPE (func) :: res

    res = MIN(a1, REAL(a2,dpk))
  END FUNCTION min2_FS_

  ELEMENTAL FUNCTION min2_SF_(a1, a2) RESULT (res)
    IMPLICIT NONE

    REAL (spk),  INTENT (in) :: a1
    TYPE (func), INTENT (in) :: a2
    TYPE (func) :: res

    res = MIN(a2, a1)
  END FUNCTION min2_SF_

  ELEMENTAL FUNCTION min3_(a1, a2, a3) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a1, a2, a3
    TYPE (func) :: res

    res = MIN(a1, MIN(a2,a3))
  END FUNCTION min3_

  ELEMENTAL FUNCTION minexponent_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    INTEGER :: res

    res = MINEXPONENT(a%value)
  END FUNCTION minexponent_

  PURE FUNCTION minloc_1(a) RESULT (res) 
    IMPLICIT NONE

    TYPE (func), DIMENSION (:), INTENT (in) :: a
    INTEGER, DIMENSION (SIZE(SHAPE(a))) :: res

    res = MINLOC(a%value)
  END FUNCTION minloc_1

  PURE FUNCTION minloc__dim_1(a, dim) RESULT (res) ! F95 interface
    IMPLICIT NONE

    TYPE (func), DIMENSION (:), INTENT (in) :: a
    INTEGER, INTENT (in) :: dim   ! not optional
    INTEGER, DIMENSION (SIZE(SHAPE(a))) :: res

    res = MINLOC(a%value, dim)
  END FUNCTION minloc__dim_1

  PURE FUNCTION minloc__mask_1(a, mask) RESULT (res) ! F90 interface
    IMPLICIT NONE

    TYPE (func), DIMENSION (:), INTENT (in) :: a
    LOGICAL, DIMENSION (:), INTENT (in) :: mask   ! not optional
    INTEGER, DIMENSION (SIZE(SHAPE(a))) :: res

    res = MINLOC(a%value, mask)
  END FUNCTION minloc__mask_1

  PURE FUNCTION minloc__dim_mask_1(a, dim, mask) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:), INTENT (in) :: a
    INTEGER, INTENT (in) :: dim
    LOGICAL, DIMENSION (:), INTENT (in) :: mask
    INTEGER, DIMENSION (SIZE(SHAPE(a))) :: res

    res = MINLOC(a%value, dim, mask)  
  END FUNCTION minloc__dim_mask_1

  PURE FUNCTION minval_1(a, dim, mask) RESULT (res) 
    IMPLICIT NONE

    TYPE (func), DIMENSION (:), INTENT (in) :: a 
    INTEGER, INTENT (in), OPTIONAL :: dim
    LOGICAL, DIMENSION (:), INTENT (in), OPTIONAL :: mask ! same rank with a
    TYPE (func) :: res   ! res is scalar

    INTEGER :: ind(SIZE(SHAPE(a)))
    INTEGER :: mydim
    LOGICAL, DIMENSION (SIZE(a)) :: mymask

    mydim = 1
    IF (PRESENT(dim)) mydim = dim

    mymask = .TRUE.
    IF (PRESENT(mask)) mymask = mask

    ind = MINLOC(a, mydim, mymask)

    res = a(ind(1))
  END FUNCTION minval_1

  ELEMENTAL FUNCTION mod_FF_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a, b

    TYPE (func) :: res
    INTEGER :: div

    res%value = MOD(a%value, b%value)

    IF (order_is_1or2) THEN
       div = (a%value - res%value) / b%value
       res%x = a%x - div * b%x
    END IF
    IF (order_is_2) res%xx = a%xx - div * b%xx
  END FUNCTION mod_FF_

  ELEMENTAL FUNCTION mod_FR_(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda

    TYPE (func) :: res

    res = a
    res%value = MOD(a%value, lambda)
  END FUNCTION mod_FR_

  ELEMENTAL FUNCTION mod_RF_(lambda, b) RESULT (res)  
    IMPLICIT NONE

    REAL (dpk),  INTENT (in) :: lambda
    TYPE (func), INTENT (in) :: b

    REAL (dpk) :: res

    res = MOD(lambda, b%value)
  END FUNCTION mod_RF_
  ! no mod_sf, mod_fs; a, lambda must be of the same kind

  ELEMENTAL FUNCTION modulo_FF_(a, b) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a, b
    TYPE (func) :: res

    INTEGER :: div

    res%value = MODULO(a%value, b%value)

    IF (order_is_1or2) THEN
       div = (a%value - res%value) / b%value
       res%x = a%x - div * b%x
    END IF
    IF (order_is_2) res%xx = a%xx - div * b%xx
  END FUNCTION modulo_FF_

  ELEMENTAL FUNCTION modulo_FR_(a, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda

    TYPE (func) :: res

    res = a
    res%value = MODULO(a%value, lambda)
  END FUNCTION modulo_FR_

  ! no modulo_sf, modulo_fs; a, lambda must be of the same kind 
  ELEMENTAL FUNCTION modulo_RF_(lambd, a) RESULT (res)
    IMPLICIT NONE

    REAL (dpk),  INTENT (in) :: lambd
    TYPE (func), INTENT (in) :: a

    REAL (dpk) :: res

    res = MODULO(lambd, a%value)
  END FUNCTION modulo_RF_

  ELEMENTAL FUNCTION nearest_FF_(a, b) RESULT (res) 
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a, b
    TYPE (func) :: res

    ! the derivatives should be kept. Otherwise, don't use nearest().
    res = a 

    res = NEAREST(a%value, b%value)
  END FUNCTION nearest_FF_

  ELEMENTAL FUNCTION nearest_RF_(a, b) RESULT (res) 
    IMPLICIT NONE

    REAL (dpk),  INTENT (in) :: a
    TYPE (func), INTENT (in) :: b
    REAL (dpk) :: res

    res = NEAREST(a, b%value)
  END FUNCTION nearest_RF_

  ELEMENTAL FUNCTION nearest_FR_(a, b) RESULT (res) 
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: b
    TYPE (func) :: res

    res = NEAREST(a, func(b, 0.0_dpk, 0.0_dpk))
  END FUNCTION nearest_FR_

  ELEMENTAL FUNCTION nearest_SF_(a, b) RESULT (res) 
    IMPLICIT NONE

    REAL (spk),  INTENT (in) :: a
    TYPE (func), INTENT (in) :: b
    REAL (spk) :: res

    res = NEAREST(a, b%value)
  END FUNCTION nearest_SF_

  ELEMENTAL FUNCTION nearest_FS_(a, b) RESULT (res) 
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: b
    TYPE (func) :: res

    res = NEAREST(a, REAL(b, dpk))
  END FUNCTION nearest_FS_

  ELEMENTAL FUNCTION nint_(a) RESULT (res) 
    ! optional argument kind cannot be implemented
    IMPLICIT NONE
    TYPE (func), INTENT (in) :: a
    INTEGER :: res

    res = NINT(a%value)
  END FUNCTION nint_

  ELEMENTAL FUNCTION precision_(a) RESULT (res)
    IMPLICIT NONE
    TYPE (func), INTENT (in) :: a
    INTEGER :: res

    res = PRECISION(a%value)
  END FUNCTION precision_

  PURE FUNCTION product_1(a, dim, mask) RESULT (res)
    IMPLICIT NONE

    TYPE (func), DIMENSION (:), INTENT (in) :: a  
    INTEGER, INTENT (in), OPTIONAL :: dim  
    LOGICAL, DIMENSION (:), INTENT (in), OPTIONAL :: mask
    TYPE (func) :: res      ! res is array with rank = rank(a) - 1

    INTEGER :: i, j, k
    REAL (dpk) :: old_a, old_a_2
    REAL (dpk), DIMENSION(SIZE(a,1)) :: a_  ! copy of a
    INTEGER :: mydim
    LOGICAL, DIMENSION (SIZE(a)) :: mymask

    mydim = 1
    IF (PRESENT(dim)) mydim = dim

    mymask = .TRUE.
    IF (PRESENT(mask)) mymask = mask

    a_ = a%value

    res%value = PRODUCT(a_, mydim, mymask)

    IF (order_is_1or2) THEN 
       DO j = 1, n
          res%x(j) = 0.0_dpk
          DO i = 1, SIZE(a)
             old_a = a_(i)
             a_(i) = a(i)%x(j)
             res%x(j) = res%x(j) + PRODUCT(a_, mydim, mymask)
             a_(i) = old_a
          ENDDO
       ENDDO
    ENDIF

    IF (order_is_2) THEN 
       ! First add to the sum the terms : 
       ! a_1%xx() * a_2 * a_3 ... + a_1 * a_2%xx() * a_3 ... + ...
       DO j = 1, nhes
          res%xx(j) = 0.0_dpk
          DO i = 1, SIZE(a)
             old_a = a_(i)
             a_(i) = a(i)%xx(j)
             res%xx(j) = res%xx(j) + PRODUCT(a_, mydim, mymask)
             a_(i) = old_a
          ENDDO
       ENDDO

       ! Now compute the tensor products
       DO j = 1, nhes
          DO k = 1, SIZE(a)
             old_a = a_(k)
             a_(k) = a(k)%x(col(j))
             
             DO i = 1, SIZE(a)
                IF (i == k) CYCLE
                old_a_2 = a_(i)
                a_(i) = a(i)%x(row(j))
                res%xx(j) = res%xx(j) + PRODUCT(a_, mydim, mymask)
                a_(i) = old_a_2
             ENDDO
             
             a_(k) = old_a
          ENDDO
       ENDDO
    ENDIF
  END FUNCTION product_1

  ELEMENTAL FUNCTION radix_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    INTEGER :: res

    res = RADIX(a%value)
  END FUNCTION radix_

  ELEMENTAL FUNCTION range_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    INTEGER :: res

    res = RANGE(a%value)
  END FUNCTION range_

  ELEMENTAL FUNCTION rrspacing_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk) :: res

    res = RRSPACING(a%value)
  END FUNCTION rrspacing_

  ELEMENTAL FUNCTION scale_(a, i) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    INTEGER,     INTENT (in) :: i
    TYPE (func) :: res

    res%value                 = SCALE(a%value, i)
    IF (order_is_1or2) res%x  = SCALE(a%x, i)
    IF (order_is_2)    res%xx = SCALE(a%xx, i)
  END FUNCTION scale_

  ELEMENTAL FUNCTION set_exponent_(a, i) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    INTEGER,     INTENT (in) :: i
    REAL (dpk) :: res

    res = SET_EXPONENT(a%value, i)
  END FUNCTION set_exponent_

  ELEMENTAL FUNCTION sign_FF_(a, b) RESULT (res)
    IMPLICIT NONE
    TYPE (func), INTENT (in) :: a
    TYPE (func), INTENT (in) :: b
    TYPE (func) :: res

    res = ABS(a)
    IF (b < 0.0_dpk) res = -res
  END FUNCTION sign_FF_

  ELEMENTAL FUNCTION sign_RF_(lambda, a) RESULT (res)
    IMPLICIT NONE

    REAL (dpk) , INTENT (in) :: lambda
    TYPE (func), INTENT (in) :: a
    REAL (dpk) :: res

    res = SIGN(lambda, a%value)
  END FUNCTION sign_RF_

  ELEMENTAL FUNCTION sign_FR_(b, lambda) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: b
    REAL (dpk),  INTENT (in) :: lambda
    TYPE (func) :: res

    res =  ABS(b)
    IF (lambda < 0.0_dpk) res = -res
  END FUNCTION sign_FR_
  ! no sign_sf_, sign_fs_; a, lambda must be of the same kind 

  ELEMENTAL FUNCTION sin_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    REAL (dpk) :: cosa 

    res%value = SIN(a%value)
    IF (order_is_1or2) THEN 
       cosa  = COS(a%value) 
       res%x = cosa * a%x
    ENDIF

    IF (order_is_2) res%xx = -res%value * tensor(a,a) + cosa * a%xx
  END FUNCTION sin_

  ELEMENTAL FUNCTION sinh_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    REAL (dpk) :: cosha 

    res%value = SINH(a%value)
    IF (order_is_1or2) THEN 
       cosha = COSH(a%value)
       res%x = cosha * a%x
    ENDIF

    IF (order_is_2) res%xx = res%value * tensor(a,a) + cosha * a%xx
  END FUNCTION sinh_

  ELEMENTAL FUNCTION spacing_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk) :: res

    res = SPACING(a%value)
  END FUNCTION spacing_

  ELEMENTAL FUNCTION sqrt_(a) RESULT (res)
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    IF (a%value == 0.0_dpk) CALL IEEE_SET_FLAG(IEEE_INVALID, .TRUE.)
    ! discontinuous function.

    res%value = SQRT(a%value)
    IF (order_is_1or2) res%x = 0.5_dpk / res%value * a%x
    IF  (order_is_2)  res%xx = (0.5_dpk * a%xx - tensor(res, res)) / res%value
  END FUNCTION sqrt_

  PURE FUNCTION sum_1(a, dim, mask) RESULT (res) 
    IMPLICIT NONE
    TYPE (func), DIMENSION (:), INTENT (in)           :: a
    INTEGER,                    INTENT (in), OPTIONAL :: dim
    LOGICAL,     DIMENSION (:), INTENT (in), OPTIONAL :: mask 
    ! mask has the shape of a
    TYPE (func) :: res  ! res is array with rank = rank(a) - 1

    INTEGER :: i, mydim
    LOGICAL, DIMENSION (SIZE(a)) :: mymask

    mydim = 1
    IF (PRESENT(dim)) mydim = dim

    mymask = .TRUE.
    IF (PRESENT(mask)) mymask = mask

    res%value = SUM(a%value, mydim, mymask)

    IF (order_is_1or2) FORALL(i=1:n)  res%x(i) = SUM(a%x(i),  mydim, mymask)
    IF (order_is_2) FORALL(i=1:nhes) res%xx(i) = SUM(a%xx(i), mydim, mymask)
  END FUNCTION sum_1

  ELEMENTAL FUNCTION tan_(a) RESULT (res)
    IMPLICIT NONE
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    REAL (dpk)  :: sec2

    res%value = TAN(a%value)
    IF (order_is_1or2) THEN
       sec2 = 1.0_dpk + res%value**2        ! 1.0_dpk / COS(a%value)**2
       res%x = sec2 * a%x
    ENDIF

    IF (order_is_2) res%xx = sec2 * a%xx + 2.0_dpk * res%value * tensor(a,res)
  END FUNCTION tan_

  ELEMENTAL FUNCTION tanh_(a) RESULT (res)
    IMPLICIT NONE
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    REAL (dpk)  :: sech2

    res%value = TANH(a%value)
    IF (order_is_1or2) THEN
       sech2 = 1.0_dpk - res%value**2         ! 1.0_dpk / COSH(a%value)**2
       res%x = sech2 * a%x
    ENDIF

    IF (order_is_2) res%xx = sech2 * a%xx - 2.0_dpk * res%value * tensor(a,res)
  END FUNCTION tanh_

  ELEMENTAL FUNCTION tiny_(a) RESULT (res)
    IMPLICIT NONE
    TYPE (func), INTENT (in) :: a
    REAL (dpk) :: res

    res = TINY(a%value)
  END FUNCTION tiny_
END MODULE ad_fortran_library

MODULE ad_operator_power
  USE ad_types
  USE ad_auxiliary
  USE ad_assign

  USE IEEEx_EXCEPTIONS

  IMPLICIT NONE

  INTERFACE OPERATOR (**)
     MODULE PROCEDURE power_FF, power_FR, power_FS, power_FI
     MODULE PROCEDURE power_RF, power_SF, power_IF
  END INTERFACE

  PRIVATE 
  PUBLIC :: OPERATOR (**)

CONTAINS
  ELEMENTAL FUNCTION power_FR(a, lambda) RESULT (res)   ! res = a**lambda
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (dpk),  INTENT (in) :: lambda
    TYPE (func) :: res

    IF (lambda == 0.0_dpk) THEN
       IF (a%value == 0.0_dpk) CALL IEEE_SET_FLAG(IEEE_INVALID, .TRUE.)

       res%value = 1.0_dpk
       IF (order_is_1or2) res%x  = 0.0_dpk
       IF (order_is_2)    res%xx = 0.0_dpk

       RETURN
    END IF

    IF (lambda == 1.0_dpk) THEN 
       res = a
       RETURN
    ENDIF

    IF (a%value == 0.0_dpk) THEN
       res%value = 0.0_dpk
       IF (order_is_1or2) res%x  = 0.0_dpk
       IF (order_is_2)    res%xx = 0.0_dpk

       RETURN
    ENDIF

    res%value = a%value**lambda
    
    IF (order_is_1or2) res%x  = lambda * res%value / a%value * a%x
    
    IF (order_is_2)    res%xx = ((lambda - 1.0_dpk) * tensor(res,a) &
         + lambda * res%value * a%xx) / a%value

  END FUNCTION power_FR

  ELEMENTAL FUNCTION power_FS(a, lambda) RESULT (res) ! res = a**lambda
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a
    REAL (spk),  INTENT (in) :: lambda
    TYPE (func) :: res

    res = a**REAL(lambda, dpk)
  END FUNCTION power_FS

  ELEMENTAL FUNCTION power_FI(a, lambda) RESULT (res) ! res = a**lambda
    IMPLICIT NONE

    TYPE (func),  INTENT (in) :: a
    INTEGER (ik), INTENT (in) :: lambda
    TYPE (func) :: res

    res = a**REAL(lambda, dpk)
  END FUNCTION power_FI

  ELEMENTAL FUNCTION power_RF(lambda, a) RESULT (res)    ! res = lambda**a
    IMPLICIT NONE

    REAL (dpk),  INTENT (in) :: lambda
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    IF (lambda <= 0.0_dpk) CALL IEEE_SET_FLAG(IEEE_INVALID, .TRUE.)

    res%value = lambda**a%value

    IF (order_is_1or2) res%x  = LOG(lambda) * res%value * a%x
    IF (order_is_2)    res%xx = LOG(lambda) * (tensor(res,a) + res%value * a%xx)
  END FUNCTION power_RF

  ELEMENTAL FUNCTION power_SF(lambda, a) RESULT (res)     ! res = lambda**a
    IMPLICIT NONE

    REAL (spk),  INTENT (in) :: lambda
    TYPE (func), INTENT (in) :: a
    TYPE (func) :: res

    res = REAL(lambda, dpk)**a
  END FUNCTION power_SF

  ELEMENTAL FUNCTION power_IF(lambda, a) RESULT (res)
    IMPLICIT NONE

    INTEGER (ik), INTENT (in) :: lambda
    TYPE (func),  INTENT (in) :: a
    TYPE (func) :: res

    res = REAL(lambda, dpk)**a
  END FUNCTION power_IF

  ELEMENTAL FUNCTION power_FF(a, b) RESULT (res)     ! res = a**b
    USE ad_operator_star
    USE ad_fortran_library, ONLY : exp, log
    IMPLICIT NONE

    TYPE (func), INTENT (in) :: a, b
    TYPE (func) :: res

    res = EXP(LOG(a) * b)
  END FUNCTION power_FF

END MODULE ad_operator_power

MODULE deriv_class
  USE ad_types
  USE ad_utilities
  USE ad_fortran_library
  USE ad_assign
  USE ad_operator_plus
  USE ad_operator_minus
  USE ad_operator_star
  USE ad_operator_slash
  USE ad_operator_power
  USE ad_relational
  IMPLICIT NONE

  PRIVATE :: n, nhes, order_is_2, order_is_1or2, dpk, spk, ik
END MODULE deriv_class
-------------- next part --------------
echo f2py build for auto_deriv

echo deleting previous build
rm -i *.so

echo building Python wrappers

f2py3  -c gravity_derivs.f           -m gravity_derivs          --f77flags="-c -O -Wall"
f2py3  -c auto_deriv auto_deriv.f90  -m auto_deriv auto_deriv

echo done.


More information about the NumPy-Discussion mailing list