<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic VB is case sensitive and in Intel® Fortran Compiler</title>
    <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164576#M144001</link>
    <description>&lt;P&gt;VB is case sensitive and doesn't "decorate" names. Also for 32-bit, VB uses the STDCALL convention by default, but I see you overrode that with Cdecl, so that part is ok.&lt;/P&gt;</description>
    <pubDate>Thu, 10 Aug 2017 17:56:53 GMT</pubDate>
    <dc:creator>Steve_Lionel</dc:creator>
    <dc:date>2017-08-10T17:56:53Z</dc:date>
    <item>
      <title>A reference to path//myDLL.dll could not be added.please make sure that the file is accessible,and that is a valid assembly or</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164569#M143994</link>
      <description>&lt;P style="margin-bottom: 1em; border: 0px; font-variant-numeric: inherit; font-stretch: inherit; font-size: 15px; line-height: inherit; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; vertical-align: baseline; clear: both; color: rgb(36, 39, 41);"&gt;&amp;nbsp;1. have some Fortran .f90 files.&lt;/P&gt;

&lt;P style="margin-bottom: 1em; border: 0px; font-variant-numeric: inherit; font-stretch: inherit; font-size: 15px; line-height: inherit; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; vertical-align: baseline; clear: both; color: rgb(36, 39, 41);"&gt;2 I installed visual Fortran compiler in visual studio 2015&lt;/P&gt;

&lt;OL start="3" style="margin-bottom: 1em; margin-left: 30px; border: 0px; font-variant-numeric: inherit; font-stretch: inherit; font-size: 15px; line-height: inherit; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial; color: rgb(36, 39, 41);"&gt;
	&lt;LI style="margin-bottom: 0.5em; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline; word-wrap: break-word;"&gt;
		&lt;P style="margin-bottom: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline; clear: both;"&gt;I created library DLL empty project.&lt;/P&gt;
	&lt;/LI&gt;
	&lt;LI style="border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline; word-wrap: break-word;"&gt;
		&lt;P style="margin-bottom: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline; clear: both;"&gt;I added all .f90 and .f files to the project.&lt;/P&gt;
	&lt;/LI&gt;
&lt;/OL&gt;

&lt;P style="margin-bottom: 1em; border: 0px; font-variant-numeric: inherit; font-stretch: inherit; font-size: 15px; line-height: inherit; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; vertical-align: baseline; clear: both; color: rgb(36, 39, 41);"&gt;5 I compiled the project.&lt;/P&gt;

&lt;P style="margin-bottom: 1em; border: 0px; font-variant-numeric: inherit; font-stretch: inherit; font-size: 15px; line-height: inherit; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; vertical-align: baseline; clear: both; color: rgb(36, 39, 41);"&gt;6 now I have myproject.dll file.&lt;/P&gt;

&lt;P style="margin-bottom: 1em; border: 0px; font-variant-numeric: inherit; font-stretch: inherit; font-size: 15px; line-height: inherit; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; vertical-align: baseline; clear: both; color: rgb(36, 39, 41);"&gt;7.I created a web application.&lt;/P&gt;

&lt;P style="margin-bottom: 1em; border: 0px; font-variant-numeric: inherit; font-stretch: inherit; font-size: 15px; line-height: inherit; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; vertical-align: baseline; clear: both; color: rgb(36, 39, 41);"&gt;8 I try to add myproject.dll to references.&lt;/P&gt;

&lt;P style="margin-bottom: 1em; border: 0px; font-variant-numeric: inherit; font-stretch: inherit; font-size: 15px; line-height: inherit; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; vertical-align: baseline; clear: both; color: rgb(36, 39, 41);"&gt;9.I got this error in visual studio environment before compile. :&lt;/P&gt;

&lt;P style="margin-bottom: 1em; border: 0px; font-variant-numeric: inherit; font-stretch: inherit; font-size: 15px; line-height: inherit; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; vertical-align: baseline; clear: both; color: rgb(36, 39, 41);"&gt;reference manager: A reference to path//myDLL.dll could not be added.please make sure that the file is accessible,and that is a valid assembly or COM component.&lt;/P&gt;

&lt;P style="margin-bottom: 1em; border: 0px; font-variant-numeric: inherit; font-stretch: inherit; font-size: 15px; line-height: inherit; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; vertical-align: baseline; clear: both; color: rgb(36, 39, 41);"&gt;Which project type knows my dll?.is there any error in compile of my dll?therefore what should I do?&lt;/P&gt;

&lt;P style="margin-bottom: 1em; border: 0px; font-variant-numeric: inherit; font-stretch: inherit; font-size: 15px; line-height: inherit; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; vertical-align: baseline; clear: both; color: rgb(36, 39, 41);"&gt;Best regards&lt;/P&gt;</description>
      <pubDate>Mon, 07 Aug 2017 11:48:09 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164569#M143994</guid>
      <dc:creator>John_C_</dc:creator>
      <dc:date>2017-08-07T11:48:09Z</dc:date>
    </item>
    <item>
      <title>Which version of Fortran dll</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164570#M143995</link>
      <description>Which version of Fortran dll is compatible with c# ASP.NET web application ,something like  

http://www.c-sharpcorner.com/UploadFile/1e050f/creating-and-using-dll-class-library-in-C-Sharp/

At all my question is that how could I use .dll files created with visual Fortran compiler &amp;gt;library&amp;gt;DLL?

Any help Wil be appreciated</description>
      <pubDate>Mon, 07 Aug 2017 16:18:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164570#M143995</guid>
      <dc:creator>John_C_</dc:creator>
      <dc:date>2017-08-07T16:18:00Z</dc:date>
    </item>
    <item>
      <title>Quote:John C. wrote:</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164571#M143996</link>
      <description>&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE&gt;John C. wrote:&lt;BR /&gt;&lt;P&gt;&lt;/P&gt;

&lt;P&gt;Which version of Fortran dll is compatible with c# ASP.NET web application ,something like&lt;BR /&gt;
	&lt;A href="http://www.c-sharpcorner.com/UploadFile/1e050f/creating-and-using-dll-class-library-in-C-Sharp/"&gt;http://www.c-sharpcorner.com/UploadFile/1e050f/creating-and-using-dll-cl...&lt;/A&gt;&lt;/P&gt;

&lt;P&gt;Any help Wil be appreciated&lt;/P&gt;

&lt;P&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;

&lt;P&gt;@John C.,&lt;/P&gt;

&lt;P&gt;Please note a Fortran DLL is similar to a C DLL or an unmanaged (Microsift terminology) C++ DLL.&lt;/P&gt;

&lt;P&gt;Look up online on how to interoperate ASP.NET applications with a C DLL or an unmanaged C++ DLL using a P/Invoke layer, etc. the same concepts will apply &lt;SPAN style="background-color: rgb(246, 213, 217);"&gt;to the&amp;nbsp;&lt;/SPAN&gt;Fortran libraries also.&lt;/P&gt;

&lt;P&gt;By the way, look in Quote #2 of the thread below for an example of a .NET application working with Fortran; it's in Visual Basic but the same idea holds for a C# ASP.NET web application too, though with the latter you will likely have to consider thread safety and reentrancy.&lt;/P&gt;

&lt;P&gt;&lt;A href="https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/509148" target="_blank"&gt;https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/509148&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 07 Aug 2017 18:03:33 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164571#M143996</guid>
      <dc:creator>FortranFan</dc:creator>
      <dc:date>2017-08-07T18:03:33Z</dc:date>
    </item>
    <item>
      <title>Dear @FortranFan</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164572#M143997</link>
      <description>Dear @FortranFan
Thanks for your attention.I saw the link.that was too complicated.Would you please give me a brief in some sentences,for more information.how should I do step by step in a few sentences.

Is it possible to import such a this dll from reference add new reference in project explorer window and see the inner modules?

Best regards</description>
      <pubDate>Mon, 07 Aug 2017 18:59:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164572#M143997</guid>
      <dc:creator>John_C_</dc:creator>
      <dc:date>2017-08-07T18:59:00Z</dc:date>
    </item>
    <item>
      <title>Dear @FortranFan your project</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164573#M143998</link>
      <description>Dear @FortranFan your project works in VS2012 but not work in VS2015.it gets the error 

reference manager: A reference to path//myDLL.dll could not be added.please make sure that the file is accessible,and that is a valid assembly or COM component

When trying to add dll to references.in VS2012 in VB there is no reference approach.you must import Fortran module manually coding.

But the main problem reason still available.</description>
      <pubDate>Mon, 07 Aug 2017 22:18:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164573#M143998</guid>
      <dc:creator>John_C_</dc:creator>
      <dc:date>2017-08-07T22:18:00Z</dc:date>
    </item>
    <item>
      <title>Dear @FortranFan I did what</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164574#M143999</link>
      <description>&lt;P&gt;&lt;STRONG&gt;Dear @FortranFan I did what you said (on the project as the topic) as same &amp;nbsp;as your link instruction but I got this errors&lt;/STRONG&gt;&lt;/P&gt;

&lt;P&gt;EntryPointNotFoundException was unhandled&lt;/P&gt;

&lt;P&gt;Unable to find an entry point named 'endat3D' in DLL 'C:\Users\admin\Downloads\HW5 add mexfam with DLL VB B\HelloWorld\HelloWorld\electrostatic3D\Debug\electrostatic3D.DLL'.&lt;/P&gt;

&lt;P&gt;&lt;STRONG&gt;on this line of code (VB):&lt;/STRONG&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Call endat3D( _&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; strMessage, _&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AddressOf RTBDisplayStatus)&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	&lt;STRONG&gt;this is my vb page:&lt;/STRONG&gt;&lt;/P&gt;

&lt;P&gt;Option Strict Off&lt;BR /&gt;
	Option Explicit On&lt;/P&gt;

&lt;P&gt;Imports System.Text&lt;BR /&gt;
	Imports System.Runtime.InteropServices&lt;/P&gt;

&lt;P&gt;Public Class frmHelloWorld&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;lt;UnmanagedFunctionPointer(CallingConvention.Cdecl)&amp;gt; _&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;Public Delegate Sub WriteDelegate(SomeString As StringBuilder, ByRef Irc As Integer)&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;lt;DllImport("C:\Users\admin\Downloads\HW5 add mexfam with DLL VB B\HelloWorld\HelloWorld\electrostatic3D\Debug\electrostatic3D.DLL", CallingConvention:=CallingConvention.Cdecl)&amp;gt; _&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; Public Shared Sub endat3D(MsgString As StringBuilder, _&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;MarshalAs(UnmanagedType.FunctionPtr)&amp;gt; fPtr As WriteDelegate)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; End Sub&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;Private Sub btnRun_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRun.Click&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Dim strMessage As StringBuilder&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; Dim IRC As Integer&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; strMessage = New StringBuilder("From VB.NET: Hello World")&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Call RTBDisplayStatus(New StringBuilder("From VB.NET: Starting Fortran"), IRC)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Call endat3D( _&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; strMessage, _&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AddressOf RTBDisplayStatus)&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Call RTBDisplayStatus(New StringBuilder("From VB.NET: Finished Fortran"), IRC)&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;End Sub&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;Public Sub RTBDisplayStatus(s1 As StringBuilder, ByRef irc As Integer)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; '&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; 'frmHelloWorld.vb / RTBDisplayStatus&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; '&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; RichTextBox1.Text += s1.ToString().Trim() &amp;amp; vbCrLf&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; System.Windows.Forms.Application.DoEvents()&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; '&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;End Sub&lt;/P&gt;

&lt;P&gt;End Class&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	&lt;STRONG&gt;and this is my endat3D.f90&lt;/STRONG&gt;&lt;/P&gt;

&lt;P&gt;!------------------------------------------------------------------------&lt;BR /&gt;
	! &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DATA INPUT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	!------------------------------------------------------------------------&lt;/P&gt;

&lt;P&gt;&amp;nbsp; subroutine endat3D( )&lt;/P&gt;

&lt;P&gt;&amp;nbsp; use fich_electros3D&lt;BR /&gt;
	&amp;nbsp; use parametros_electros3D&lt;BR /&gt;
	&amp;nbsp; use electros3D&lt;BR /&gt;
	&amp;nbsp; use cargavol&lt;BR /&gt;
	&amp;nbsp; use cargacur&lt;BR /&gt;
	&amp;nbsp; use cargapun&lt;BR /&gt;
	&amp;nbsp; use permitividad&lt;BR /&gt;
	&amp;nbsp; use bloqueo&lt;BR /&gt;
	&amp;nbsp; use derivados3D&lt;BR /&gt;
	&amp;nbsp; use auxiliar_cargas&lt;/P&gt;

&lt;P&gt;&amp;nbsp; implicit none&lt;/P&gt;

&lt;P&gt;&amp;nbsp; integer :: temp &amp;nbsp; &amp;nbsp; &amp;nbsp; ! Dirichlte/Neumann : number of references per function&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ! Volumic charges &amp;nbsp; : number of charged domains per function&lt;BR /&gt;
	&amp;nbsp; integer :: fnum &amp;nbsp; &amp;nbsp; &amp;nbsp; ! function numbers: Dirichlet (1 to 7) function(1) == User defined&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ! &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Neumann &amp;nbsp; (1 or 3) function(1) == User defined&lt;BR /&gt;
	&amp;nbsp; integer :: temp1 &amp;nbsp; &amp;nbsp; &amp;nbsp;! input via function for the volumic charge (1 Y 0 N)&lt;BR /&gt;
	&amp;nbsp; integer :: temp2 &amp;nbsp; &amp;nbsp; &amp;nbsp;! input via array for the volumic charge (1 Y 0 N)&lt;BR /&gt;
	&amp;nbsp; integer :: temp3 &amp;nbsp; &amp;nbsp; &amp;nbsp;! input via file for the volumic charge (1 Y 0 N)&lt;BR /&gt;
	&amp;nbsp; integer :: i,j&lt;/P&gt;

&lt;P&gt;&amp;nbsp; dir%fun = 1&lt;BR /&gt;
	&amp;nbsp; neu%fun = 1&lt;BR /&gt;
	&amp;nbsp; vol%fun = 1&lt;BR /&gt;
	&amp;nbsp; sup%fun = 1&lt;BR /&gt;
	&amp;nbsp; cur%fun = 1&lt;/P&gt;

&lt;P&gt;&amp;nbsp; nrn &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = 0&lt;BR /&gt;
	&amp;nbsp; neuman%numero &amp;nbsp; = 0&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; nrd &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = 0&lt;BR /&gt;
	&amp;nbsp; blofron%numero &amp;nbsp;= 0&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; blopun%numero &amp;nbsp; = 0&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; carvol%numero &amp;nbsp; = 0&lt;BR /&gt;
	&amp;nbsp; carsup%numero &amp;nbsp; = 0&lt;BR /&gt;
	&amp;nbsp; carcur%numero &amp;nbsp; = 0&lt;BR /&gt;
	&amp;nbsp; ncarpun &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = 0&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; permirel%numero = 0&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; read*,fichma&lt;BR /&gt;
	&amp;nbsp; read*,fichsol&lt;BR /&gt;
	&amp;nbsp; read*,fichgradsol&lt;/P&gt;

&lt;P&gt;&amp;nbsp; print*,'Strong imposition of Dirichlet conditions option (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; read*,iopblo&lt;BR /&gt;
	&amp;nbsp; print*,iopblo&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; opcion_bloqueo: if (iopblo.eq.1) then&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Strong imposition of Dirichlet conditions'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Input via function (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*,iopblo1&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,iopblo1&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Strong imposition of Dirichlet conditions'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Input via constants in the boundaries (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*,iopblo2&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,iopblo2&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Strong imposition of Dirichlet conditions'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Input via punctual blocking (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*,iopblo3&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,iopblo3&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;entrada_por_funcion: if (iopblo1.eq.1) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, 'Strong imposition of Dirichlet conditions'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, 'Input via function'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; do while (.TRUE.)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print *, 'Number of references'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*,temp &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (temp &amp;lt;= 0) exit&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print *, 'References'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*,(irefd(i),i=nrd+1,nrd+temp)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,(irefd(i),i=nrd+1,nrd+temp)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print *, 'Function associated to the references'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*, fnum&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,fnum&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dir%fun(nrd+1:nrd+temp) = fnum&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (fnum&amp;lt;1 .or. fnum&amp;gt;7) stop 'incorrect function number'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nrd = nrd + temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;endif entrada_por_funcion&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;entrada_por_constantes: if (iopblo2.eq.1) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, 'Strong imposition of Dirichlet conditions'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, 'Input via constants in the boundaries'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, 'Number of references'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,blofron%numero&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,blofron%numero&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(blofron%numero.gt.0) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'References and values'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;do i=1,blofron%numero&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,blofron%referencias(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,blofron%valor(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,(blofron%referencias(i),i=1,blofron%numero)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,(blofron%valor(i),i=1,blofron%numero)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; endif&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;endif entrada_por_constantes&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;entrada_por_puntos: if (iopblo3.eq.1) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, 'Strong imposition of Dirichlet conditions'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, 'Input via punctual blocking'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, 'Number of points'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,blopun%numero&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,blopun%numero&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (blopun%numero.gt.0) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'References and values'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;do i=1,blopun%numero&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,blopun%referencias(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,blopun%valor(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,(blopun%referencias(i),i=1,blopun%numero)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,(blopun%valor(i),i=1,blopun%numero)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; endif&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;endif &amp;nbsp;entrada_por_puntos&lt;/P&gt;

&lt;P&gt;&amp;nbsp; endif &amp;nbsp;opcion_bloqueo&lt;/P&gt;

&lt;P&gt;&amp;nbsp; print*, 'Neumann references option (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; read*,iopneu&lt;BR /&gt;
	&amp;nbsp; print*,iopneu&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; opcion_neuman: &amp;nbsp;if (iopneu.eq.1) then&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Neumann references option'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Input via function (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*,iopneu1&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,iopneu1&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Neumann references option'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Input via constants in the boundaries (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*,iopneu2&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,iopneu2&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;entrada_por_funcion_neuman: if (iopneu1.eq.1) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, 'Neumann references option'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, 'Input via function'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; do while (.TRUE.)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print *, 'Number of references'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*,temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print *, temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (temp &amp;lt;= 0) exit&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print *, 'References'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*,(irefn(i),i=nrn+1,nrn+temp)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,(irefn(i),i=nrn+1,nrn+temp)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print *, 'Function associated to the references'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*, fnum&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;neu%fun(nrn+1:nrn+temp) = fnum&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (fnum/=1 .and. fnum/=3) stop 'incorrect function number'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,fnum,functions(fnum)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nrn = nrn + temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;endif entrada_por_funcion_neuman&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;entrada_por_constantes_neuman: if (iopneu2.eq.1) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, 'Neumann references option'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, 'Input via constants in the boundaries'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, 'Number of references'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,neuman%numero&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,neuman%numero&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (neuman%numero.gt.0) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print *, 'References and values'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;do i=1,neuman%numero&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,neuman%referencias(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,neuman%valor(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; endif&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,(neuman%referencias(i),i=1,neuman%numero)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,(neuman%valor(i),i=1,neuman%numero)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;endif entrada_por_constantes_neuman&lt;/P&gt;

&lt;P&gt;&amp;nbsp; endif &amp;nbsp;opcion_neuman&lt;/P&gt;

&lt;P&gt;&amp;nbsp; print *, 'Quadrature formula for matrix and second member option'&lt;BR /&gt;
	&amp;nbsp; read*,iop&lt;BR /&gt;
	&amp;nbsp; print*,iop&lt;BR /&gt;
	&amp;nbsp; print *, 'Quadrature formula for the boundary terms'&lt;BR /&gt;
	&amp;nbsp; read*,iopf&lt;BR /&gt;
	&amp;nbsp; print*,iopf&lt;/P&gt;

&lt;P&gt;&amp;nbsp; print *, 'Volumic charge option (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; read*,iopvol&lt;BR /&gt;
	&amp;nbsp; print*,iopvol&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; if (iopvol.eq.1) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Volumic charge option'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Input via function (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*, temp1&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print *, temp1&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Volumic charge option'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Input via constants in the domains (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*, temp2&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print *, temp2&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (temp1.eq.1) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; do while (.TRUE.)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print *, 'Number of references'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*,temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print *, temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (temp &amp;lt;= 0) exit &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Domain references'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*,(carvol%referencias(i), i=carvol%numero+1,carvol%numero+temp)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,(carvol%referencias(i), i=carvol%numero+1,carvol%numero+temp)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;carvol%valor(carvol%numero+1:carvol%numero+temp)=0.d0&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;carvol%constante(carvol%numero+1:carvol%numero+temp)=.FALSE.&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Type one of the function numbers below:'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,1,': ',functions(1)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,2,': ',functions(2)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*, fnum&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;vol%fun(carvol%numero+1:carvol%numero+temp) = fnum&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (fnum/=1 .and. fnum/=2) stop 'incorrect function number'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,fnum,functions(fnum)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;carvol%numero = carvol%numero + temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;endif&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (temp2.eq.1) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,'Number of charges by constant'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (temp.gt.0) then&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;do i=1,temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,'Domain references'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,carvol%referencias(carvol%numero+i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,carvol%referencias(carvol%numero+i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,'Charge associated to the domain'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,carvol%valor(carvol%numero+i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,carvol%valor(carvol%numero+i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; carvol%constante(carvol%numero+i) = .TRUE.&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; carvol%numero = carvol%numero + temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; endif&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;end if&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; end if&lt;/P&gt;

&lt;P&gt;&amp;nbsp; print*,'Superficial charge option (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; read*,iopsup&lt;BR /&gt;
	&amp;nbsp; print*,iopsup&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; if (iopsup.eq.1) then&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Superficial charge option'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Input via function (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*,temp1&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,temp1&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Superficial charge option'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Input via constants in the surfaces (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*,temp2&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,temp2&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (temp1.eq.1) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; do while (.TRUE.)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Number of surfaces'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*,temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print *, temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (temp &amp;lt;= 0) exit &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Surface references'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*,(carsup%referencias(i),i=carsup%numero+1,carsup%numero+temp)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,(carsup%referencias(i),i=carsup%numero+1,carsup%numero+temp)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;carsup%valor(carsup%numero+1:carsup%numero+temp)=0.d0&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;carsup%constante(carsup%numero+1:carsup%numero+temp)=.FALSE.&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Type one of the function numbers below:'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,1,': ',functions(1)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,3,': ',functions(3)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,4,': ',functions(4)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*, fnum&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sup%fun(carsup%numero+1:carsup%numero+temp) = fnum&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (fnum/=1 .and. fnum/=3 .and. fnum/=4) stop 'incorrect function number'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,fnum,functions(fnum)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;carsup%numero = carsup%numero + temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;endif&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (temp2.eq.1) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,'Number of surfaces'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print *, temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (temp.gt.0) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print *, 'Surface references and associated values'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;do i=1,temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,carsup%referencias(carsup%numero+i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,carsup%valor(carsup%numero+i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; carsup%constante(carsup%numero+i) = .TRUE.&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print *, (carsup%referencias(carsup%numero+i),i=1,temp)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print *, (carsup%valor(carsup%numero+i),i=1,temp)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;carsup%numero = carsup%numero + temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; endif &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;end if&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; end if&lt;/P&gt;

&lt;P&gt;&amp;nbsp; print*,'Curvilinear charge option (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; read*,iopcur&lt;BR /&gt;
	&amp;nbsp; print*,iopcur&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; if (iopcur.eq.1) then&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Curvilinear charge option'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Input via function (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*,temp1&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print *, temp1&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Curvilinear charge option'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*, 'Input via constants in the curves (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*,temp2&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print *, temp2&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (temp1.eq.1) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; do while (.TRUE.)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Number of curves'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*,temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (temp &amp;lt;= 0) exit &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Curve references'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*,(carcur%referencias(i),i=carcur%numero+1,carcur%numero+temp)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,(carcur%referencias(i),i=carcur%numero+1,carcur%numero+temp)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;carcur%valor(carcur%numero+1:carcur%numero+temp)=0.d0&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;carcur%constante(carcur%numero+1:carcur%numero+temp)=.FALSE.&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Type one of the function numbers below:'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,1,': ',functions(1)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,5,': ',functions(5)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*, fnum&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cur%fun(carcur%numero+1:carcur%numero+temp) = fnum&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (fnum/=1 .and. fnum/=5) stop 'incorrect function number' &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,fnum,functions(fnum)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;carcur%numero = carcur%numero + temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;endif&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (temp2.eq.1) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Number of curves'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*,temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print *, temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(temp.gt.0) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, 'Curve references and associated charges'&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; do i=1,temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*,carcur%referencias(carcur%numero+i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*,carcur%valor(carcur%numero+i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;carcur%constante(carcur%numero+i) = .TRUE.&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print *, (carcur%referencias(carcur%numero+i),i=1,temp)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print *, (carcur%valor(carcur%numero+i),i=1,temp)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; carcur%numero = carcur%numero + temp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;endif &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end if&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;end if&lt;/P&gt;

&lt;P&gt;&amp;nbsp; print*,'Punctual charge option (1 Yes 0 No)'&lt;BR /&gt;
	&amp;nbsp; read*,ioppun&lt;BR /&gt;
	&amp;nbsp; print*,ioppun&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; if (ioppun.eq.1) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Number of charges'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*,ncarpun&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;do i=1,ncarpun&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,'Point coordinates and associated charge'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,xcarpun(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,ycarpun(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,zcarpun(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,carpun(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, xcarpun(i),ycarpun(i),zcarpun(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*, carpun(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;enddo&lt;BR /&gt;
	&amp;nbsp; end if&lt;/P&gt;

&lt;P&gt;&amp;nbsp; iopteta=0&lt;/P&gt;

&lt;P&gt;&amp;nbsp; print*,'Number of subdomains'&lt;BR /&gt;
	&amp;nbsp; read*,permirel%numero&lt;BR /&gt;
	&amp;nbsp; do i=1,permirel%numero&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Subdomain number'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*,permirel%referencias(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,permirel%referencias(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Relative electric permitivity option'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'1 --&amp;gt; Via function'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'2 --&amp;gt; Via constants per domain'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'3 --&amp;gt; Via array'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*,permirel%iopermir(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,permirel%iopermir(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;if(permirel%iopermir(i).eq.1) then&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,'Function name'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; !do j=1,size(functions_perm,1)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ! &amp;nbsp; print *, j,': ', functions_perm(j)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; !enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,permirel%etiqueta(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; !print*,permirel%fun(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (permirel%fun(i)&amp;lt;1 .or. permirel%fun(i)&amp;gt; &amp;amp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; size(functions_perm,1)) stop 'incorrect function number'&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;elseif(permirel%iopermir(i).eq.2) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,'Electric permitivity (x,y,z)'&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,permirel%valorx(i), permirel%valory(i), permirel%valorz(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print*,permirel%valorx(i), permirel%valory(i), permirel%valorz(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;elseif(permirel%iopermir(i).eq.3)then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; iopteta=1&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; read*,permirel%ntab(i)&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; do j=1,permirel%ntab(i)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read*,permirel%teta(i,j),permirel%valtabx(i,j), &amp;nbsp;&amp;amp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;permirel%valtaby(i,j),permirel%valtabz(i,j)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;else&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; stop 'Incorrect relative electric permitivity option: only 1 , 2 , 3'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;endif &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; enddo&lt;/P&gt;

&lt;P&gt;&amp;nbsp; if (iopteta.eq.1) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Name of temperature file'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*,fichteta&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,fichteta&lt;BR /&gt;
	&amp;nbsp; endif&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; print*,'Option for the linear system resolution'&lt;BR /&gt;
	&amp;nbsp; print*,'1: Direct method, 0 : Conjugate gradient'&lt;BR /&gt;
	&amp;nbsp; read*,iopsl&lt;BR /&gt;
	&amp;nbsp; print*,iopsl &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; if(iopsl.eq.0) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Corvengence error in CG'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read* ,epscg&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,epscg&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Maximum number of iterations in CG'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;read*,nitcg&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,nitcg&lt;BR /&gt;
	&amp;nbsp; endif&lt;/P&gt;

&lt;P&gt;&amp;nbsp; if(allocated(ncaras))deallocate(ncaras)&lt;BR /&gt;
	&amp;nbsp; allocate(ncaras(carsup%numero),stat=ierror)&lt;BR /&gt;
	&amp;nbsp; if (ierror.ne.0) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Error while allocating ncaras'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;stop 1&lt;BR /&gt;
	&amp;nbsp; endif &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; if(allocated(nodc1))deallocate(nodc1)&lt;BR /&gt;
	&amp;nbsp; if(allocated(nodc2))deallocate(nodc2)&lt;BR /&gt;
	&amp;nbsp; if(allocated(nodc3))deallocate(nodc3)&lt;BR /&gt;
	&amp;nbsp; allocate(nodc1(carsup%numero,ndcaras), &amp;amp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nodc2(carsup%numero,ndcaras), &amp;amp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nodc3(carsup%numero,ndcaras),stat=ierror)&lt;BR /&gt;
	&amp;nbsp; if (ierror.ne.0) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Error while allocating nodc1,2 o 3'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;stop 1&lt;BR /&gt;
	&amp;nbsp; endif&lt;/P&gt;

&lt;P&gt;&amp;nbsp; if(allocated(naristas))deallocate(naristas)&lt;BR /&gt;
	&amp;nbsp; allocate(naristas(carcur%numero),stat=ierror)&lt;BR /&gt;
	&amp;nbsp; if (ierror.ne.0) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Error while allocating naristas'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;stop 1&lt;BR /&gt;
	&amp;nbsp; endif&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; if(allocated(nod1))deallocate(nod1)&lt;BR /&gt;
	&amp;nbsp; if(allocated(nod2))deallocate(nod2)&lt;BR /&gt;
	&amp;nbsp; allocate(nod1(carcur%numero,ndar), &amp;amp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nod2(carcur%numero,ndar),stat=ierror)&lt;BR /&gt;
	&amp;nbsp; if (ierror.ne.0) then&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;print*,'Error while allocating nod1 o nod2'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;stop 1&lt;BR /&gt;
	&amp;nbsp; endif&lt;/P&gt;

&lt;P&gt;&amp;nbsp; return&lt;BR /&gt;
	&amp;nbsp; end&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	&lt;STRONG&gt;so what should I do?&lt;/STRONG&gt;&lt;/P&gt;

&lt;P&gt;&lt;STRONG&gt;best regards&lt;/STRONG&gt;&lt;/P&gt;

&lt;P&gt;&lt;UNMANAGEDFUNCTIONPOINTER&gt; &lt;DLLIMPORT&gt;&lt;/DLLIMPORT&gt;&lt;/UNMANAGEDFUNCTIONPOINTER&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 10 Aug 2017 16:32:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164574#M143999</guid>
      <dc:creator>John_C_</dc:creator>
      <dc:date>2017-08-10T16:32:00Z</dc:date>
    </item>
    <item>
      <title>It appears to be a simple</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164575#M144000</link>
      <description>&lt;P&gt;It appears to be a simple name decoration issue. By default, the Fortran compiler creates an entry point ENDAT3D regardless of the case used for the name in the Fortran source. VB probably uses a different convention, so the names of the entry expected and the entry present differ in case and/or underscores. There are a number of ways of managing name decoration, ranging from compiler options to embedded DEC$ directives in the Fortran code. Find out what VB expects and make the Fortran match that (I don't use VB, so I don't know what it expects).&lt;/P&gt;</description>
      <pubDate>Thu, 10 Aug 2017 16:58:54 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164575#M144000</guid>
      <dc:creator>mecej4</dc:creator>
      <dc:date>2017-08-10T16:58:54Z</dc:date>
    </item>
    <item>
      <title>VB is case sensitive and</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164576#M144001</link>
      <description>&lt;P&gt;VB is case sensitive and doesn't "decorate" names. Also for 32-bit, VB uses the STDCALL convention by default, but I see you overrode that with Cdecl, so that part is ok.&lt;/P&gt;</description>
      <pubDate>Thu, 10 Aug 2017 17:56:53 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164576#M144001</guid>
      <dc:creator>Steve_Lionel</dc:creator>
      <dc:date>2017-08-10T17:56:53Z</dc:date>
    </item>
    <item>
      <title>perhaps maybe problems is</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164577#M144002</link>
      <description>perhaps maybe problems is there :
1.one probability is that compiler could not make a total DLL from my Fortran files .
2.and another maybe there is a mistake on calling dlls in my vb code .
3.and at last any modification in my .f90 Fortran files are needed.
4. Finally maybe confusing of the names(in .f90 ,in dll,in vb code and so far)...</description>
      <pubDate>Thu, 10 Aug 2017 18:21:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164577#M144002</guid>
      <dc:creator>John_C_</dc:creator>
      <dc:date>2017-08-10T18:21:00Z</dc:date>
    </item>
    <item>
      <title>Focusing on these lines:</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164578#M144003</link>
      <description>Focusing on these lines:
....
    &lt;DLLIMPORT&gt; _
    Public Shared Sub endat3D(MsgString As StringBuilder, _
                                        &lt;MARSHALAS&gt; fPtr As WriteDelegate)
    End Sub
....

and 
.....
        Call endat3D( _
              strMessage, _
              AddressOf RTBDisplayStatus)&lt;/MARSHALAS&gt;&lt;/DLLIMPORT&gt;</description>
      <pubDate>Thu, 10 Aug 2017 18:26:46 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164578#M144003</guid>
      <dc:creator>John_C_</dc:creator>
      <dc:date>2017-08-10T18:26:46Z</dc:date>
    </item>
    <item>
      <title>My main .f90 file that I want</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164579#M144004</link>
      <description>My main .f90 file that I want to call via DLL  is principal.f90 as below:

!---------------------------------------------------------------------------
!                                                                
!  GOAL : Solve, by means of finite elements, the electrostatics 3D
!         PDE with different boundary conditions and charges
!                                                                 
!              |  -div(permi grad(V))=f                           
!         (1)  |   V = V+ on Dirichlet boundary
!              |   permi d(V)/dn=g 
!                                                                
!                  Dolores Gomez                                 
!                  MC Muٌiz                                     
!                  Jose Luis Ferrin Gonzalez                    
!                                                                
!---------------------------------------------------------------------------

 program ppalelectros3D


  use fich_electros3D
  use electros3D
  use cargavol
  use cargacur
  use cargapun
  use permitividad
  use bloqueo
  use derivados3D        
  use malla_3DP1
  use external_electros3D
  use module_writeVTU
  use comprobaciones
  use module_convers
  use module_fem_extract
  use module_conver3d, only: conver3d
  use LIB_VTK_IO_READ
  use module_readUNV
  use module_compiler_dependant

  implicit none
  integer :: i,istat, p, nnod,DIMS,LNN,LNV,LNE,LNF,nnd,nco,npieces,nverteta,iformat
  integer, allocatable :: nn(:,:)
  real(real64), allocatable :: evtun(:)   

!---------------------------------------------------------------------------
!                            INPUT DATA                                    
!---------------------------------------------------------------------------

   if (command_argument_count() == 0) then
       call endat3D()
   else
       call readxml()
   end if

! INPUT DATA VERIFICATION, FOR ENDAT &amp;amp; READXML  
   if (.not. comprueba()) then
      write(error_unit,*) 'Input data check failed'
      stop 1
   else
      write(output_unit,*) 'Input data check passed'
   endif
   
   call calculate_funs()

! 0.0 IS ASSIGNED TO THE LAST VERTEX IN CASE OF NOT HAVING DIRICHLET CONDITIONS  
   if (blocking_node() &amp;lt; 0) then
      write(error_unit,*) 'Error assigning blocking node'
      stop 1
   endif 
   
!---------------------------------------------------------------------------
!                     ELECTROMAGNETIC MESH READING                    
!---------------------------------------------------------------------------
   call calindc(indc,inda)

   p = index(fichma, '.', back=.true.)
   if  (p == 0) stop 'Mesh file has not extension: unable to identify mesh format'
   select case (lcase(fichma(p+1:len_trim(fichma))))
   case('mfm')
     iformat=1
     call leema3D(iformat)
   case('mum')
     iformat=2
     call leema3D(iformat)
   case('unv')
     call readUNV(fichma,nel,nnod,nver,dims,LNN,LNV,LNE,LNF,nn,mm,nrc,nra,nrv,z,nsd)
     call conver3d(nel, nver, mm, z, nemm, det, binv, ib, jb)
   case default
     stop 'Unrecognized mesh file extension'
   end select
   call alloc_after_mesh()
   
!---------------------------------------------------------------------------
!                     TEMPERATURE READING                    
!---------------------------------------------------------------------------
   if (iopteta == 1) call leetmp()

!---------------------------------------------------------------------------
!                            COMPUTATIONS                                
!---------------------------------------------------------------------------
   if (iopblo.eq.1.and.iopblo1.eq.1) then
      call calprebloqueof(nrd,irefd)
   endif
   if (iopblo.eq.1.and.iopblo2.eq.1) then
      call calprebloqueoc(blofron%numero,blofron%referencias)
   endif

   call electrostatica3D()
   
   if(allocated(vexac))deallocate(vexac)
   allocate(vexac(nver),stat=ierror)
   if (ierror.ne.0) then
      print*,'Error while allocating array vexac',nver
      stop 1
   endif

   if(allocated(err))deallocate(err)
   allocate(err(nver),stat=ierror)
   if (ierror.ne.0) then
      print*,'Error while allocating array err',nver
      stop 1
   endif

!      call wrtcmp(nver,sol,10,fichsol)
!      call writeVTU(nel,nver,mm,z,'tetra',sol,'solucion','scalar', &amp;amp;
!             'node',trim(fichsol)//'.vtu')

! -1: mixed functions
! 0: no data
! 1: User defined / Function defined by user
! ...
   if (dir%funs &amp;gt; 1.or.&amp;amp;
       neu%funs &amp;gt; 1.or.&amp;amp;
       vol%funs &amp;gt; 1.or.&amp;amp;
       sup%funs &amp;gt; 1.or.&amp;amp;
       cur%funs &amp;gt; 1) then
      
      do i=1,nver
         vexac(i) = fexac(z(1,i),z(2,i),z(3,i))
         err(i)   = dabs(vexac(i)-sol(i)) 
      enddo

      if (dir%funs == 7) then ! 'Example 6'
         vexac(376) = sol(376)
         vexac(193) = sol(193)
         err(193)   = dabs(vexac(193)-sol(193))
         err(376)   = dabs(vexac(376)-sol(376))
      elseif (dir%funs == 6) then ! 'Example 5'
         vexac(1292) = sol(1292)
         err(1292)   = dabs(vexac(1292)-sol(1292))
      endif

      call norl2_3D(sol,xnorexac)
      call norl2_3D(vexac,xnorexac)
      call norl2_3D(err,xnorerr)
      rel = xnorerr/xnorexac
      print*,'Relative error (%)',100*rel
        
   endif

! COMPUTATION OF THE ELECTRIC FIELD 
   call ef()    

!---------------------------------------------------------------------------
!                            RESULTS OUTPUT                             
!---------------------------------------------------------------------------
   call wrtcmp(nver,sol,10,fichsol)

   call writeVTU(nel,nver,mm,z,'tetra',sol,'Potential (V)','scalar', &amp;amp;
                                  'node',trim(fichsol)//'.vtu')

   call wrtcmpv(nel,e,10,fichgradsol)

   if(allocated(evtu))deallocate(evtu)
   allocate(evtu(3*nel),STAT=istat)
   if (istat.ne.0) stop 'Error while allocating evtu in principal'
      
   evtu(1:nel*3:3)=e(1,1:nel)
   evtu(2:nel*3:3)=e(2,1:nel)
   evtu(3:nel*3:3)=e(3,1:nel)
   call cell2node(nver, mm, evtu, evtun)
   call writeVTU(nel,nver,mm,z,'tetra',evtun,'Electric field (V/m)',&amp;amp;
                  'vector','node',trim(fichgradsol)//'.vtu')
     
   deallocate(evtu,STAT=istat)
   if (istat.ne.0) stop 'Error while deallocating in principal' 
   deallocate(sol,STAT=istat)
   if (istat.ne.0) stop 'Error while deallocating in principal' 
   deallocate(e,STAT=istat)
   if (istat.ne.0) stop 'Error while deallocating in principal' 
   
   stop 'End of the execution'

 end</description>
      <pubDate>Thu, 10 Aug 2017 19:17:56 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164579#M144004</guid>
      <dc:creator>John_C_</dc:creator>
      <dc:date>2017-08-10T19:17:56Z</dc:date>
    </item>
    <item>
      <title>As @FortranFan said in</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164580#M144005</link>
      <description>As @FortranFan said in
&lt;A href="https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/509148" target="_blank"&gt;https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/509148&lt;/A&gt;

Visit my vs2012 ell error page snapshot.  At.
 &lt;A href="https://i.stack.imgur.com/CnoTQ.jpg" target="_blank"&gt;https://i.stack.imgur.com/CnoTQ.jpg&lt;/A&gt;

Everything is ok.but I have a lot of .f90 files as a dll project.how could I modify @FortranFan project with a little changes that cover my Fortran project?
Regards</description>
      <pubDate>Thu, 10 Aug 2017 20:05:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164580#M144005</guid>
      <dc:creator>John_C_</dc:creator>
      <dc:date>2017-08-10T20:05:00Z</dc:date>
    </item>
    <item>
      <title>Quote:John C. wrote:</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164581#M144006</link>
      <description>&lt;P&gt;&lt;SPAN style="font-size: 1em;"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;BLOCKQUOTE&gt;John C. wrote:&lt;BR /&gt;&lt;P&gt;&lt;/P&gt;

&lt;P&gt;As @FortranFan said in&lt;BR /&gt;
	&lt;A href="https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/509148"&gt;https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-fo...&lt;/A&gt;&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em;"&gt;.. how could I modify @FortranFan project with &lt;/SPAN&gt;a little changes&lt;SPAN style="font-size: 1em;"&gt; that cover my Fortran project ..&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;

&lt;P&gt;@John C.,&lt;/P&gt;

&lt;P&gt;You seem to be taking the Visual Basic .NET and Fortran example from the above thread on this forum and literally using the Visual Basic code with only a name change to &lt;SPAN style="font-size: 12px;"&gt;endat3D and hoping everything works out. &amp;nbsp;It's not as simple as that, at least as far as I know.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;It would appear you need to do a lot more&amp;nbsp;research and investigate further because your posts above indicate issues at the very basic (no pun intended!) level: first, you do not seem to have paid attention to make the procedures in Fortran callable in a mixed language environment and whether &lt;SPAN style="font-size: 13.008px;"&gt;as part of this, you have even looked into the interoperability aspects with a companion C processor; you do not seem to have looked into the method signatures i.e., matching the procedure declaration in Fortran with the interface in Visual Basic; also, &lt;/SPAN&gt;it's unclear if you have setup your Fortran DLL project correctly with the necessary export definitions.&lt;/P&gt;

&lt;P&gt;All I can suggest is for you to look up information online and apply the learnings to your situation and note the complete working example of Visual Basic .NET and Fortran from the above thread is a good guide, provided you pay attention to the relevant details:&lt;/P&gt;

&lt;UL&gt;
	&lt;LI&gt;Information on setting up of DLLs by Microsoft:&amp;nbsp;https://msdn.microsoft.com/en-us/library/1ez7dh12.aspx&lt;/LI&gt;
	&lt;LI&gt;Also look into DLL example with&amp;nbsp;Intel Fortran:&amp;nbsp;https://software.intel.com/en-us/fortran-compiler-18.0-developer-guide-and-reference-using-the-intel-fortran-samples&lt;/LI&gt;
	&lt;LI&gt;Mixed-language programming for Fortran and C:&amp;nbsp;https://software.intel.com/en-us/fortran-compiler-18.0-developer-guide-and-reference-mixed-language-programming&lt;/LI&gt;
	&lt;LI&gt;Pay particular attention to standard Fortran interoperability aspects:&amp;nbsp;https://software.intel.com/en-us/fortran-compiler-18.0-developer-guide-and-reference-standard-fortran-and-c-interoperability&lt;/LI&gt;
&lt;/UL&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 10 Aug 2017 21:23:29 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164581#M144006</guid>
      <dc:creator>FortranFan</dc:creator>
      <dc:date>2017-08-10T21:23:29Z</dc:date>
    </item>
    <item>
      <title>@FortranFan,</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164582#M144007</link>
      <description>@FortranFan,
I saw some pages of each link you introduced.but it takes a lot of time to study.I am looking for a more quick strategy.so what should I do?
As the discussion issue Would you please introduce or send me a visual studio 2012 -Fortran application -dll .NET example which I could download and test them with vs2012?
Really I want to mix Fortran with c# asp.net web application , but VB.NET Windows form application as the first step is good.actually c or c++ are a little far from my goal.
Regards</description>
      <pubDate>Thu, 10 Aug 2017 22:08:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164582#M144007</guid>
      <dc:creator>John_C_</dc:creator>
      <dc:date>2017-08-10T22:08:00Z</dc:date>
    </item>
    <item>
      <title>There are two sample</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164583#M144008</link>
      <description>&lt;P&gt;There are two sample applications that mix VB with Fortran that you can find in the samples installed with your compiler version. (In some newer versions the samples are provided online only.) Unpack the samples ZIP file into a writable folder and look under Fortran &amp;gt; MixedLanguage. I don't know what the "stringbuilder" thing does.&lt;/P&gt;</description>
      <pubDate>Fri, 11 Aug 2017 00:00:29 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164583#M144008</guid>
      <dc:creator>Steve_Lionel</dc:creator>
      <dc:date>2017-08-11T00:00:29Z</dc:date>
    </item>
    <item>
      <title>@Steve Lionel (Ret) ,</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164584#M144009</link>
      <description>@Steve Lionel (Ret) ,
I run them.could I use them for my purpose.means changing .f90 file into many .f90 files and call them via vb.net as the sample easily or as @FortranFan said it takes to study more.do you have any idea?
Best regards</description>
      <pubDate>Fri, 11 Aug 2017 00:45:28 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164584#M144009</guid>
      <dc:creator>John_C_</dc:creator>
      <dc:date>2017-08-11T00:45:28Z</dc:date>
    </item>
    <item>
      <title>One or many .f90 files makes</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164585#M144010</link>
      <description>&lt;P&gt;One or many .f90 files makes no difference. What matters is getting the expectations of VB and Fortran to match.&lt;/P&gt;

&lt;P&gt;I see that your Fortran code that you want to call "as a DLL" has a main program. That won't work. You have to call a subroutine or a function, so you'll have to restructure the program as a function that can be called. You can test it first by calling from a Fortran main program, and then work out how to interface it to VB. &amp;nbsp;&lt;/P&gt;

&lt;P&gt;I suggested the VB-Fortran samples as "case studies" for how to do this sort of thing. You'll see in both programs that there is no Fortran main program - instead there are functions. The VB code determines what data wants to be processed by the Fortran code and calls the Fortran function, which resides in a DLL. The call then returns to VB which does something with the result.&lt;/P&gt;

&lt;P&gt;I fear that you think there's a simple edit to your existing program that will make it all work with VB - that is not the case.&lt;/P&gt;</description>
      <pubDate>Fri, 11 Aug 2017 01:05:06 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164585#M144010</guid>
      <dc:creator>Steve_Lionel</dc:creator>
      <dc:date>2017-08-11T01:05:06Z</dc:date>
    </item>
    <item>
      <title>@Steve Lionel (Ret) ,,</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164586#M144011</link>
      <description>@Steve Lionel (Ret) ,,
Could I change VB-Calls-Fortran project (sample inside Intel Parallel package) ?
as locally in
 
C:\Users\admin\Documents\MixedLanguage\MixedLanguage\VB-Calls-Fortran...

as to run my project with a few modification as below: the scripts below are originally as same as the package ,no modification applied. 

in fcall.90 :
...
! Fortran part of a VB-Fortran DLL example. This
! routine DLL_ROUT is called from a VB.NET executable
! program.
SUBROUTINE DLL_ROUT (DBL_IN, STRING_IN, DBL_OUT)
IMPLICIT NONE
...

in Module1.vb
...
Module Module1
    REM Use ByVal to pass strings unless the called routine expects BSTR structures
    Public Declare Auto Sub DLL_ROUTMo Lib "FCALL.DLL" _
   (ByVal DBL_IN() As Double, ByVal STR_IN As String, ByVal DBL_OUT() As Double)
End Module
...
 in Form1.vb
....
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim DBL_IN(4) As Double
        Dim DBL_OUT(4) As Double
        Dim MULTIPLIER As String
        ' Note that in VB, arrays are zero-based.
        DBL_IN(0) = 1.0
        DBL_IN(1) = 2.0
        DBL_IN(2) = 3.0
        DBL_IN(3) = 4.0
        MULTIPLIER = "2.0"
        Call DLL_ROUT(DBL_IN, MULTIPLIER, DBL_OUT)
        TextBox1.Text = DBL_OUT(0)
        TextBox2.Text = DBL_OUT(1)
        TextBox3.Text = DBL_OUT(2)
        TextBox4.Text = DBL_OUT(3)
    End Sub
....

i want to add more .f90 files and now it's not important to send argument(in future maybe).In a fortran DLL librray could it make a DLL covering all .f90 subroutine (or function) files?

the tree directory list is as below:

C:.
│   build.bat
│   ReadMe.txt
│   VB-Calls-Fortran.sln
│
├───FCALL
│   │   fcall.f90
│   │   FCALL.vfproj
│   │
│   └───Debug
│           BuildLog.htm
│           FCALL.dll
│           FCALL.dll.intermediate.manifest
│           FCALL.exp
│           FCALL.lib
│           fcall.obj
│           FCALL.pdb
│           vc110.pdb
│
├───README_FIRST
│       README_FIRST.vfproj
│
└───VBCallsFortran
    │   AssemblyInfo.vb
    │   Form1.resx
    │   Form1.vb
    │   Module1.vb
    │   VBCallsFortran.vbproj
    │
    ├───bin
    │       FCALL.dll
    │       VBCallsFortran.exe
    │       VBCallsFortran.pdb
    │       VBCallsFortran.vshost.exe
    │       VBCallsFortran.vshost.exe.manifest
    │       VBCallsFortran.xml
    │
    ├───My Project
    └───obj
        └───x86
            └───Debug
                │   DesignTimeResolveAssemblyReferences.cache
                │   DesignTimeResolveAssemblyReferencesInput.cache
                │   VBCallsFortran.exe
                │   VBCallsFortran.Form1.resources
                │   VBCallsFortran.pdb
                │   VBCallsFortran.vbproj.FileListAbsolute.txt
                │   VBCallsFortran.vbproj.GenerateResource.Cache
                │   VBCallsFortran.xml
                │
                └───TempPE

When I changed DLL_ROUT to Mysubroutine  in all files above and I add all my .f90 files I see this error:

EntryPointNotFoundException was unhandled
 Unable to find an entry point named 'Mysubroutine' in DLL 'FCALL.DLL'.

on this line:

Call Mysubroutine()

But When I changed back the Mysubroutine to it's original name DLL_ROUT everything works right.Is there any problem in making DLL or something else?
any help will be appreciated
Best Regards</description>
      <pubDate>Sat, 12 Aug 2017 18:21:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164586#M144011</guid>
      <dc:creator>John_C_</dc:creator>
      <dc:date>2017-08-12T18:21:00Z</dc:date>
    </item>
    <item>
      <title>A part of my problem solved</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164587#M144012</link>
      <description>A part of my problem solved as I use VB.NET-SafeArrays package and changing all ForCall statements to readxml  and add this line of code:

!dec$ attributes dllexport, stdcall, reference, alias : "readxml" :: readxml

define readxml as 

subroutine readxml(VBArray)

and  adding 

integer(int_ptr_kind()), intent(inout) :: VBArray  !Pointer to a SafeArray structure  

there is no error but nothing happen when I run the project ,
this is my readxml.f90 file contents:

!-----------------------------------------------------------------------
! procedure for reading the solver variables
!-----------------------------------------------------------------------

  subroutine readxml(VBArray)
  
  ! Set the attributes needed for compatibility with VB.NET.  VB always uses STDCALL.
  !
  !dec$ attributes dllexport, stdcall, reference, alias : "readxml" :: readxml
  
  use module_SO_DEPENDANT
  use module_REPORT
  use module_xml_parser
!Solver modules
  use fich_electros3D
  use electros3D, DOUBLElocal1 =&amp;gt; DOUBLE
  use cargavol, DOUBLElocal2 =&amp;gt; DOUBLE
  use cargacur, DOUBLElocal3 =&amp;gt; DOUBLE
  use cargapun, DOUBLElocal4 =&amp;gt; DOUBLE
  use permitividad, DOUBLElocal5 =&amp;gt; DOUBLE
  use bloqueo, DOUBLElocal6 =&amp;gt; DOUBLE
  use derivados3D, DOUBLElocal7 =&amp;gt; DOUBLE
  use auxiliar_cargas
 !use ifcom ! Declare SafeArray and BSTR interfaces
 
  implicit none
  
  
 
!!
!!  implicit none
!!  
  integer(int_ptr_kind()), intent(inout) :: VBArray  !Pointer to a SafeArray structure  

  integer :: i, j, pos, ide, im, fnum
  real(DOUBLE) :: cval
  real(DOUBLE), dimension(:), allocatable :: xcp, aux
  character(len=MAXPATH) :: matxml, sval, tval
  character(len=MAXPATH), dimension(:), allocatable :: list, list2, list3, refs
  call set_SO()
  call set_report_level(REPORT_STDOUT)

! inicializacion de variables (array)
! fun_0 == User defined / Function defined by user
  dir%fun = 1
  neu%fun = 1
  vol%fun = 1
  sup%fun = 1
  cur%fun = 1

  ide = fopen()

!Mesh
  call fread(ide, '/Mesh/Open/Mesh file', fichma)

!Boundary Condicions
  print*,'Neumann'
!Neumann conditions
  iopneu = 0; iopneu1 = 0; iopneu2 = 0
  nrn = 0
  neuman%numero = 0
  call flist(ide, '/Boundary conditions/Neumann/Conditions/', list)
  do i = 1, size(list,1) !loop for defined Neumann BC's
     call flist(ide, '/Boundary conditions/Neumann/Conditions/'//trim(list(i)), list2)
     do j = 1, size(list2,1) !loop for data type for each BC
        select case(trim(list2(j)))
        case('A function')
        !References
           call fread_alloc(ide, '/Boundary conditions/Neumann/Conditions/'//trim(list(i))//&amp;amp;
                                 &amp;amp;'/A function/Surface references', refs, realloc=.true.)
           if (size(refs,1)&amp;gt;0) then
              iopneu = 1
              iopneu1 = 1 ! ok
              !Function
              call fread(ide, '/Boundary conditions/Neumann/Conditions/'//trim(list(i))//&amp;amp;
                              &amp;amp;'/A function/Function name', sval)
              pos = nrn + 1
              irefn(pos:pos+size(refs,1)-1) = int(refs)
              fnum = function_number(sval,functions)
              if (fnum == 0) call error('readxml: unknown function: '//sval)
              neu%fun(pos:pos+size(refs,1)-1) = fnum
              nrn = nrn + size(refs,1)
           else
              print * , 'Function Neumann B.C. with 0 references: skipping'
           endif
        case('A constant')
       !References
           call fread_alloc(ide, '/Boundary conditions/Neumann/Conditions/'//trim(list(i))//&amp;amp;
                                &amp;amp;'/A constant/Surface references', refs, realloc=.true.)
           if (size(refs,1)&amp;gt;0) then
              iopneu = 1
              iopneu2 = 1 ! ok
             !Constant value
              call fread(ide, '/Boundary conditions/Neumann/Conditions/'//trim(list(i))//&amp;amp;
                             &amp;amp;'/A constant/Constant value', cval)
              pos = neuman%numero + 1
              neuman%referencias(pos:pos+size(refs,1)-1) = int(refs)
              neuman%numero = neuman%numero + size(refs,1)
              neuman%valor(pos:pos+size(refs,1)-1) = cval
           else
              print * , 'Constant Neumann B.C. with 0 references: skipping'
           endif
        case default; call error('readxml: Case not implemented.')
        end select
     enddo
  enddo

  print*,'Dirichlet'
  !Potential (Dirichlet) conditions
  iopblo = 0; iopblo1 = 0; iopblo2 = 0; iopblo3 = 0
  nrd = 0
  blofron%numero = 0
  blopun%numero = 0
  call flist(ide, '/Boundary conditions/Dirichlet/Conditions', list)
  do i = 1, size(list,1) !loop for defined potential BC's
     call flist(ide, '/Boundary conditions/Dirichlet/Conditions/'//trim(list(i)), list2)
     do j = 1, size(list2,1) !loop for data type for each BC
        select case(trim(list2(j)))
        case('A function')
          !References
          call fread_alloc(ide, '/Boundary conditions/Dirichlet/Conditions/'//trim(list(i))//&amp;amp;
                               &amp;amp;'/A function/Surface references', refs, realloc=.true.)
          if (size(refs,1)&amp;gt;0) then
             iopblo = 1
             iopblo1 = 1 ! ok
            !Function
             call fread(ide, '/Boundary conditions/Dirichlet/Conditions/'//trim(list(i))//&amp;amp;
                            &amp;amp;'/A function/Function name', sval)
             pos = nrd + 1
             irefd(pos:pos+size(refs,1)-1) = int(refs)
             fnum = function_number(sval,functions)
             if (fnum == 0) call error('readxml: unknown function: '//sval)
             dir%fun(pos:pos+size(refs,1)-1) = fnum
             nrd = nrd + size(refs,1)
          else
             print * , 'Function Dirichlet B.C. with 0 references: skipping'
          endif
        case('A constant')
          !References
           call fread_alloc(ide, '/Boundary conditions/Dirichlet/Conditions/'//trim(list(i))//&amp;amp;
                                &amp;amp;'/A constant/Surface references', refs, realloc=.true.)
           if (size(refs,1)&amp;gt;0) then
              iopblo = 1
              iopblo2 = 1 ! ok
              !Constant value
              call fread(ide, '/Boundary conditions/Dirichlet/Conditions/'//trim(list(i))//&amp;amp;
                             &amp;amp;'/A constant/Constant value', cval)
              pos = blofron%numero + 1
              blofron%referencias(pos:pos+size(refs,1)-1) = int(refs)
              blofron%numero = blofron%numero + size(refs,1)
              blofron%valor(pos:pos+size(refs,1)-1) = cval
           else
              print * , 'Constant Dirichlet B.C. with 0 references: skipping'
           endif
!        case('Point')
!           iopblo3 = 1 ! ok
!          !References
!           call fread_alloc('/B.C./Define.../B.C. type/Potential/'//trim(list(i))//&amp;amp;
!                           &amp;amp;'/Point/Reference number(s)', refs, realloc=.true.)
!          !Constant value
!           call fread('/B.C./Define.../B.C. type/Potential/'//trim(list(i))//&amp;amp;
!                     &amp;amp;'/Point/Constant value', cval)
!           if (size(refs,1)&amp;gt;0)
!              iopblo3 = 1 ! ok
!              pos = blopun%numero + 1
!              blopun%referencias(pos:pos+size(refs,1)-1) = int(refs)
!              blopun%numero = blopun%numero + size(refs,1)
!              blopun%valor(pos:pos+size(refs,1)-1) = cval
!           else
!              print * , 'Dirichlet B.C. with 0 references: skipping'
!           endif
        case default; call error('readxml: Case not implemented.')
        end select
     enddo
  enddo

! 2010-02-08,11: Blocking node and Blocking value
! 2010-09-21: comentado
!print*,'Blocking node and blocking value'
!      call fread_alloc(ide, '/Data/Blocking for Neumann problem/'//&amp;amp;
!      &amp;amp;'Blocking for Neumann problem/Blocking node', xcp, realloc=.true.)
!      call fread_alloc(ide, '/Data/Blocking for Neumann problem/'//&amp;amp;
!      &amp;amp;'Blocking for Neumann problem/Blocking value', aux, realloc=.true.)

!      if ( size(xcp,1) &amp;gt; 1 ) call error('readxml: Only 0 or 1 blocking node allowed')
!      if ( size(aux,1) &amp;gt; 1 ) call error('readxml: Only 0 or 1 blocking value allowed')
!      if ( ( size(xcp,1) == 1 ) .and. ( size(aux,1) /= 1 ) )&amp;amp;
!        &amp;amp;call error('readxml: Found blocking node but no blocking value')
!      if ( ( size(aux,1) == 1 ) .and. ( size(xcp,1) /= 1 ) )&amp;amp;
!        &amp;amp;call error('readxml: Found blocking value but no blocking node')

!      if ( ( size(xcp,1) == 1 ) .and. ( size(aux,1) == 1 ) ) then
!        iopblo = 1
!        iopblo3 = 1
!        blopun%numero = blopun%numero + 1
!        blopun%referencias(blopun%numero) = int(xcp(1))
!        blopun%valor(blopun%numero) = aux(1)
!      end if

!Sources

  print*,'Volume sources'
  !Volumic sources 
  iopvol = 0 ! 1 =&amp;gt; hai volumic sources
  carvol%numero = 0
  call flist(ide, '/Sources/Volumetric/Volumetric sources', list)
  do i = 1, size(list,1) !loop for defined volumic sources
     call flist(ide, '/Sources/Volumetric/Volumetric sources/'//trim(list(i)), list2)
     if (size(list2,1)/=1) call error('readxml: Incorrect number of childs in volume source.')
     if (trim(list2(1)) == 'A function') then
    !References
        call fread_alloc(ide, '/Sources/Volumetric/Volumetric sources/'//trim(list(i))//&amp;amp;
                             &amp;amp;'/A function/Domain references', refs, realloc=.true.)
        if (size(refs,1)&amp;gt;0) then
           iopvol = 1
         !Function
           call fread(ide, '/Sources/Volumetric/Volumetric sources/'//trim(list(i))//&amp;amp;
                          &amp;amp;'/A function/Function name', sval)
           pos = carvol%numero + 1
           carvol%referencias(pos:pos+size(refs,1)-1) = int(refs)
           carvol%numero = carvol%numero + size(refs,1)
           carvol%valor(pos:pos+size(refs,1)-1) = 0.d0
           fnum = function_number(sval,functions)
           if (fnum == 0) call error('readxml: unknown function: '//sval)
           vol%fun(pos:pos+size(refs,1)-1) = fnum
           carvol%constante(pos:pos+size(refs,1)-1) = .FALSE.
        else
           print * , 'Function volume source with 0 references: skipping'
        endif
     elseif (trim(list2(1)) == 'A constant') then
       !References
        call fread_alloc(ide, '/Sources/Volumetric/Volumetric sources/'//trim(list(i))//&amp;amp;
                             &amp;amp;'/A constant/Domain references', refs, realloc=.true.)
        if (size(refs,1)&amp;gt;0) then
           iopvol = 1
          !Constant value
           call fread(ide, '/Sources/Volumetric/Volumetric sources/'//trim(list(i))//&amp;amp;
                          &amp;amp;'/A constant/Constant value', cval)
           pos = carvol%numero + 1
           carvol%referencias(pos:pos+size(refs,1)-1) = int(refs)
           carvol%numero = carvol%numero + size(refs,1)
           carvol%valor(pos:pos+size(refs,1)-1) = cval
           carvol%constante(pos:pos+size(refs,1)-1) = .TRUE.
        else
           print * , 'Constant volume source with 0 references: skipping'
        endif
     else
        call error('readxml: Incorrect volume source child: '//trim(list2(1))//'.')
     endif
  enddo

  print*,'Surface sources'
 !Surface sources
  iopsup = 0 ! 1 =&amp;gt; hai surface sources
  carsup%numero = 0
  call flist(ide, '/Sources/Surface/Surface sources', list)
  do i = 1, size(list,1) !loop for defined surface sources
     call flist(ide, '/Sources/Surface/Surface sources/'//trim(list(i)), list2)
     if (size(list2,1)/=1) call error('readxml: Incorrect number of childs in surface source.')
     if (trim(list2(1)) == 'A function') then
     !References
        call fread_alloc(ide, '/Sources/Surface/Surface sources/'//trim(list(i))//&amp;amp;
                             &amp;amp;'/A function/Surface references', refs, realloc=.true.)
        if (size(refs,1)&amp;gt;0) then
           iopsup = 1
          !Function
           call fread(ide, '/Sources/Surface/Surface sources/'//trim(list(i))//&amp;amp;
                          &amp;amp;'/A function/Function name', sval)
           pos = carsup%numero + 1
           carsup%referencias(pos:pos+size(refs,1)-1) = int(refs)
           carsup%numero = carsup%numero + size(refs,1)
           carsup%valor(pos:pos+size(refs,1)-1) = 0.d0
           fnum = function_number(sval,functions)
           if (fnum == 0) call error('readxml: unknown function: '//sval)
           sup%fun(pos:pos+size(refs,1)-1) = fnum
           carsup%constante(pos:pos+size(refs,1)-1) = .FALSE.
        else
           print * , 'Function surface source with 0 references: skipping'
        endif
     elseif (trim(list2(1)) == 'A constant') then
       !References
        call fread_alloc(ide, '/Sources/Surface/Surface sources/'//trim(list(i))//&amp;amp;
                             &amp;amp;'/A constant/Surface references', refs, realloc=.true.)
        if (size(refs,1)&amp;gt;0) then
           iopsup = 1
          !Constant value
           call fread(ide, '/Sources/Surface/Surface sources/'//trim(list(i))//&amp;amp;
                          &amp;amp;'/A constant/Constant value', cval)
           pos = carsup%numero + 1
           carsup%referencias(pos:pos+size(refs,1)-1) = int(refs)
           carsup%numero = carsup%numero + size(refs,1)
           carsup%valor(pos:pos+size(refs,1)-1) = cval
           carsup%constante(pos:pos+size(refs,1)-1) = .TRUE.
        else
           print * , 'Constant surface source with 0 references: skipping'
        endif
     else
        call error('readxml: Incorrect surface source child: '//trim(list2(1))//'.')
     endif
  enddo

  print*,'Line sources'
 !Curvilinear sources
  iopcur = 0 ! 1 =&amp;gt; hai line sources
  carcur%numero = 0
  call flist(ide, '/Sources/Line/Line sources', list)
  do i = 1, size(list,1) !loop for defined curvilinear sources
     call flist(ide, '/Sources/Line/Line sources/'//trim(list(i)), list2)
     if (size(list2,1)/=1) call error('readxml: Incorrect number of childs in line source.')
     if (trim(list2(1)) == 'A function') then
      !References
        call fread_alloc(ide, '/Sources/Line/Line sources/'//trim(list(i))//&amp;amp;
                             &amp;amp;'/A function/Line references', refs, realloc=.true.)
        if (size(refs,1)&amp;gt;0) then
           iopcur = 1
          !Function
           call fread(ide, '/Sources/Line/Line sources/'//trim(list(i))//&amp;amp;
                          &amp;amp;'/A function/Function name', sval)
           pos = carcur%numero + 1
           carcur%referencias(pos:pos+size(refs,1)-1) = int(refs)
           carcur%numero = carcur%numero + size(refs,1)
           carcur%valor(pos:pos+size(refs,1)-1) = 0.d0
           fnum = function_number(sval,functions)
           if (fnum == 0) call error('readxml: unknown function: '//sval)
           cur%fun(pos:pos+size(refs,1)-1) = fnum
           carcur%constante(pos:pos+size(refs,1)-1) = .FALSE.
        else
           print * , 'Function line source with 0 references: skipping'
        endif
     elseif (trim(list2(1)) == 'A constant') then
       !References
        call fread_alloc(ide, '/Sources/Line/Line sources/'//trim(list(i))//&amp;amp;
                             &amp;amp;'/A constant/Line references', refs, realloc=.true.)
        if (size(refs,1)&amp;gt;0) then
           iopcur = 1
          !Constant value
           call fread(ide, '/Sources/Line/Line sources/'//trim(list(i))//&amp;amp;
                          &amp;amp;'/A constant/Constant value', cval)
           pos = carcur%numero + 1
           carcur%referencias(pos:pos+size(refs,1)-1) = int(refs)
           carcur%numero = carcur%numero + size(refs,1)
           carcur%valor(pos:pos+size(refs,1)-1) = cval
           carcur%constante(pos:pos+size(refs,1)-1) = .TRUE.
        else
           print * , 'Constant line source with 0 references: skipping'
        endif
     else
        call error('readxml: Incorrect surface source child: '//trim(list2(1))//'.')
     endif
  enddo

  print*,'Point sources'
  !Point sources
  ioppun = 0
  ncarpun = 0
  call flist(ide, '/Sources/Point/Point sources', list)
  if (size(list,1) &amp;gt; 0) ioppun = 1
  do i = 1, size(list,1) !loop for defined point sources
     pos = ncarpun + 1
     call fread_alloc(ide, '/Sources/Point/Point sources/'//trim(list(i))//'/X coordinates',xcp, realloc=.true.)
     xcarpun(pos:pos+size(xcp,1)-1) = xcp
     call fread_alloc(ide, '/Sources/Point/Point sources/'//trim(list(i))//'/Y coordinates',xcp, realloc=.true.)
     ycarpun(pos:pos+size(xcp,1)-1) = xcp
     call fread_alloc(ide, '/Sources/Point/Point sources/'//trim(list(i))//'/Z coordinates',xcp, realloc=.true.)
     zcarpun(pos:pos+size(xcp,1)-1) = xcp
     call fread_alloc(ide, '/Sources/Point/Point sources/'//trim(list(i))//'/Values',xcp, realloc=.true.) !val
!para face ser se da un �nica valor na fonte para varios puntos
! alg�n outro sitio onde sexa necesario ?
! if (size(val,1) == 1) then extendemos val � lonxitude de xcp
     carpun(pos:pos+size(xcp,1)-1) = xcp
     ncarpun = ncarpun + size(xcp,1)
  enddo

  print*,'Materials database'
!Open materials database
  call fread(ide, '/Materials file/Open/materialsDB', matxml)
  im = fopen(matxml)

  print*,'Magnitudes'
 !Magnitudes
  call flist(ide, '/Properties/Materials/Materials', list)
  permirel%numero = size(list,1)
  do i = 1, size(list,1)
     permirel%referencias(i) = int(list(i))
     call fread(ide, '/Properties/Materials/Materials/'//trim(list(i)), sval)
     call flist(im, '/Materials database/Open/Materials/'//trim(sval)//'/Relative permittivity', list2)
     if (size(list2,1)==0) call error('readxml: missing relative permittivity type for material')
     select case(trim(list2(1)))
      case('A constant')
         call flist(im,'/Materials database/Open/Materials/'//trim(sval)//'/Relative permittivity/A constant', list3)
         if (size(list3,1)==0) call error('readxml: missing constant relative permittivity type for material')
         select case(trim(list3(1)))
             case('Isotropic')
                 call fread(im, '/Materials database/Open/Materials/'//trim(sval)//'/Relative permittivity/A constant/Isotropic',&amp;amp;
                 permirel%valorx(i))
                 permirel%valory(i) = permirel%valorx(i)
                 permirel%valorz(i) = permirel%valorx(i)
             case('Orthotropic')
                 call fread(im, '/Materials database/Open/Materials/' &amp;amp;
                     //trim(sval)//'/Relative permittivity/A constant/Orthotropic/X Value',&amp;amp;
                 permirel%valorx(i))
                 call fread(im, '/Materials database/Open/Materials/' &amp;amp;
                     //trim(sval)//'/Relative permittivity/A constant/Orthotropic/Y Value',&amp;amp;
                 permirel%valory(i))
                 call fread(im, '/Materials database/Open/Materials/' &amp;amp;
                     //trim(sval)//'/Relative permittivity/A constant/Orthotropic/Z Value',&amp;amp;
                 permirel%valorz(i))
             case default; call error('readxml: Case not implemented.')
         end select
         permirel%iopermir(i) = 2
      case('A temperature dependant table')
         call flist(im,'/Materials database/Open/Materials/' &amp;amp;
             //trim(sval)//'/Relative permittivity/A temperature dependant table', list3)
         if (size(list3,1)==0) call error('readxml: missing temperature dependant relative permittivity type for material')
         select case(trim(list3(1)))
             case('Isotropic')
             !utilizamos unha variable auxiliar (aux) allocatable para saber o n� de elementos
                call fread_alloc(im, '/Materials database/Open/Materials/' &amp;amp;
                //trim(sval)//'/Relative permittivity/A temperature dependant table/Isotropic/Temperatures', aux, realloc=.true.)
                call fread(im, '/Materials database/Open/Materials/' &amp;amp;
                //trim(sval)//'/Relative permittivity/A temperature dependant table/Isotropic/Values', permirel%valtabx(i,:))
                permirel%ntab(i) = size(aux,1)
                permirel%teta(i,1:permirel%ntab(i)) = aux
                permirel%valtaby(i,1:permirel%ntab(i)) = permirel%valtabx(i,1:permirel%ntab(i))
                permirel%valtabz(i,1:permirel%ntab(i)) = permirel%valtabx(i,1:permirel%ntab(i))
             case('Orthotropic')
                call fread_alloc(im, '/Materials database/Open/Materials/'&amp;amp;
     &amp;amp;//trim(sval)//'/Relative permittivity/A temperature dependant table/Orthotropic/Temperatures', aux, realloc=.true.)
                call fread(im, '/Materials database/Open/Materials/'&amp;amp;
     &amp;amp;//trim(sval)//'/Relative permittivity/A temperature dependant table/Orthotropic/X values', permirel%valtabx(i,:))
                call fread(im, '/Materials database/Open/Materials/'&amp;amp;
     &amp;amp;//trim(sval)//'/Relative permittivity/A temperature dependant table/Orthotropic/Y values', permirel%valtaby(i,:))
                call fread(im, '/Materials database/Open/Materials/'&amp;amp;
     &amp;amp;//trim(sval)//'/Relative permittivity/A temperature dependant table/Orthotropic/Z values', permirel%valtabz(i,:))
                permirel%ntab(i) = size(aux,1)
                permirel%teta(1,1:permirel%ntab(i)) = aux
             case default; call error('readxml: Case not implemented.')
         end select
         permirel%iopermir(i) = 3
         iopteta = 1
      case ('A function')
         !call fread(im, '/Materials database/Open/Materials/'//trim(sval)//&amp;amp;
         !    &amp;amp;'/Relative permittivity/'//trim(list2(1)), tval)
         !fnum = function_number(tval, functions_perm)
         !if (fnum == 0) call error('readxml: unknown function: '//tval)
         !permirel%fun(i) = fnum
         permirel%etiqueta(i) = trim(sval)
         permirel%iopermir(i) = 1
      case default; call error('readxml: Case not implemented.')
     end select
  enddo

!Se iopermir = 3 hai q ler un ficheiro de temperaturas fichteta
  if (iopteta == 1) then
     print*,'Temperature field'
     call fread(ide, '/Data/Temperature field for materials/Field', fichteta)
  endif

  call fclose(im)
  call fclose(ide)

 !Results (missing)
  fichsol = 'fichpot'
  fichgradsol = 'fichgradpot'

!Quadrature options (missing)
  iop = 2
  iopf = 1

!Another data (missing)
  iopej = 0

!fichvexac: usado solo si iopej != 0

! todos os exemplos estan asi
! van fixas
  iopsl = 0
  epscg = 1.d-50
  nitcg = 1000

! ncaras nodc1 nodc2 nodc3 naristas nod1 nod2

! alojamiento de variables

  allocate(ncaras(carsup%numero),stat=ierror)
  if (ierror.ne.0) then
     print*,'error: no se ha podido reservar memoria para ncaras'
     stop 1
  endif

  allocate(nodc1(carsup%numero,ndcaras),&amp;amp;
           nodc2(carsup%numero,ndcaras),&amp;amp;
           nodc3(carsup%numero,ndcaras),stat=ierror)
  if (ierror.ne.0) then
     print*,'error: no se ha podido reservar memoria para nodc1,2 o 3'
     stop 1
  endif

  allocate(naristas(carcur%numero),stat=ierror)
  if (ierror.ne.0) then
     print*,'error: no se ha podido reservar memoria para naristas'
     stop 1
  endif

  allocate(nod1(carcur%numero,ndar),&amp;amp;
          nod2(carcur%numero,ndar),stat=ierror)
  if (ierror.ne.0) then
     print*,'error: no se ha podido reservar memoria para nod1 o nod2'
     stop 1
  endif
      
end subroutine


and this is the arrays.f90 file content:

subroutine ForCall (VBArray)

  ! Set the attributes needed for compatibility with VB.NET.  VB always uses STDCALL.
  !
  !dec$ attributes dllexport, stdcall, reference, alias : "ForCall" :: ForCall

  use ifcom ! Declare SafeArray and BSTR interfaces

  implicit none
  
  integer(int_ptr_kind()), intent(inout) :: VBArray  !Pointer to a SafeArray structure  

  integer, parameter :: LONG_ENOUGH_BUFFER = 2048 ! Assume we won't get a string longer than this
  character(LEN=LONG_ENOUGH_BUFFER)  mystring  ! Fortran string converted to/from BSTR
  integer(int_ptr_kind()) :: BSTRptr  ! Receives a pointer to a BSTR
    
  ! Array in which we will keep track of array bounds
  type bounds_type
    integer lb  ! Lower Bound
    integer ub  ! Upper Bound
    end type bounds_type
  integer nbounds  ! Number of bounds
  type(bounds_type), allocatable :: bounds(:)
  integer, allocatable :: indexes(:)  ! Array to hold current element indexes
  
  integer :: i, iRes, length


  ! First, we'll get the bounds of the array. This code makes no assumptions about the number of
  ! dimensions.
  !
  nbounds = SafeArrayGetDim (VBArray)
  allocate (bounds(nbounds), indexes(nbounds))
  
  do i=1,nbounds
    ires = SafeArrayGetLbound (VBArray, i, bounds(i)%lb)
    ires = SafeArrayGetUbound (VBArray, i, bounds(i)%ub)
    end do
    

  ! Example 1 - write to a text file (since we don't have a console) the
  ! bounds of the array.  You'll find this file in the BIN subfolder of
  ! the VB.NET project folder.

  open (2, file="testout.txt", status="unknown")

  write (2, *) "Shape of the array passed by VB:"  
  write (2,'("  (")',advance='no')
  do i=1,nbounds
    write (2,'(I0,":",I0)',advance='no') bounds(i)
    if (i &amp;lt; nbounds) write(2,'(",")',advance='no')
    end do
  write (2,'(")")')


  ! Example 2 - Write the values of the string elements to the file. This code
  ! also makes no assumptions about the number of dimensions. 
  !
  ! For each element we:
  !  1) Call SafeArrayGetElement to return a pointer to a BSTR element
  !  2) Convert the BSTR to a Fortran string (which we then write to the file)
  !  3) Free the string which we retrieved
  !
  ! Note that the current interface to SafeArrayGetElement has the second "indices"
  ! argument defined as a scalar - we work around that by passing the first element
  ! by reference.
  !
  write (2, *) "Strings from the array:"
  
  indexes = bounds%lb  ! Initialize to all lower bounds
  readloop: do
    ires = SafeArrayGetElement (VBArray, indexes(1), loc(BSTRPtr))
    length = ConvertBSTRToString (BSTRPtr, mystring)
    call SysFreeString(BSTRPtr)
    write (2, '("  A(")', advance='no')
    write (2, '(100(I0,:,","))', advance='no') (indexes(i),i=1,nbounds)
    write (2, '(") = ", A)') mystring(1:length)
    
    ! Determine what the next element is.  We increment the last index,
    ! and if it is greater than the upper bound, reset it to the lower bound and
    ! repeat for the next lower index.  If we run out of indexes, we're done.
    do i = nbounds, 1, -1
      indexes(i) = indexes(i) + 1
      if (indexes(i) &amp;lt;= bounds(i)%ub) exit
      indexes(i) = bounds(i)%lb
      if (i == 1) exit readloop
      end do
    end do readloop
        
  close (2) ! We're done with the file

  ! Example 3 - Modifying BSTR elements in a SafeArray.  Here we append
  ! " potato" to each of the elements.
  !
  indexes = bounds%lb  ! Initialize to all lower bounds
  writeloop: do
    ires = SafeArrayGetElement (VBArray, indexes(1), loc(BSTRPtr))
    length = ConvertBSTRToString (BSTRPtr, mystring)
    call SysFreeString (BSTRPtr)

    ! Append "potato" to the element
    mystring = trim(mystring) // " potato"
    
    ! Convert it back to a BSTR    
    BSTRptr = ConvertStringToBSTR (trim(mystring))
    
    ! Write it back to the array
    ires = SafeArrayPutElement (VBArray, indexes(1), BSTRptr)
    call SysFreeString (BSTRPtr)  ! Free our copy
        
    ! Determine what the next element is.  We increment the last index,
    ! and if it is greater than the upper bound, reset it to the lower bound and
    ! repeat for the next lower index.  If we run out of indexes, we're done.
    do i = nbounds, 1, -1
      indexes(i) = indexes(i) + 1
      if (indexes(i) &amp;lt;= bounds(i)%ub) exit
      indexes(i) = bounds(i)%lb
      if (i == 1) exit writeloop
      end do
    end do writeloop

  ! Deallocate our local arrays, though this would be done implicitly anyway
  !
  deallocate (bounds)
  deallocate (indexes)
  
  return  
end subroutine ForCall

what should I do to get an output result?</description>
      <pubDate>Sat, 12 Aug 2017 21:30:31 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164587#M144012</guid>
      <dc:creator>John_C_</dc:creator>
      <dc:date>2017-08-12T21:30:31Z</dc:date>
    </item>
    <item>
      <title>Why don't you test with a</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164588#M144013</link>
      <description>&lt;P&gt;Why don't you test with a very small piece of Fortran code?&amp;nbsp; Why not try the VB-Fortran sample code as Steve has suggested?&lt;/P&gt;</description>
      <pubDate>Sat, 12 Aug 2017 22:42:42 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-reference-to-path-myDLL-dll-could-not-be-added-please-make/m-p/1164588#M144013</guid>
      <dc:creator>gib</dc:creator>
      <dc:date>2017-08-12T22:42:42Z</dc:date>
    </item>
  </channel>
</rss>

