<!--
   ____    _ __           ____               __    ____
  / __/___(_) /  ___ ____/ __ \__ _____ ___ / /_  /  _/__  ____
 _\ \/ __/ / _ \/ -_) __/ /_/ / // / -_|_-</ __/ _/ // _ \/ __/
/___/\__/_/_.__/\__/_/  \___\_\_,_/\__/___/\__/ /___/_//_/\__(_)

Copyright 2012 SciberQuest Inc.
-->

<ServerManagerConfiguration>
<ProxyGroup name="writers">
  <!--====================================================================-->
  <WriterProxy name="vtkSQBOVWriter"
    class="vtkSQBOVWriter"
    file_name_method="SetFileName"
    supports_parallel="1">
    <Documentation
      short_help="Write BOV files using MPI-I/O">
      Write BOV files using MPI-I/O
    </Documentation>

    <InputProperty name="Input" command="SetInputConnection">
      <DataTypeDomain name="input_type" composite_data_supported="0">
        <DataType value="vtkImageData"/>
      </DataTypeDomain>
      <Documentation>
        The input filter/source whose output dataset is to written to the
        file.
      </Documentation>
    </InputProperty>

    <StringVectorProperty name="FileName"
      command="SetFileName"
      number_of_elements="1">
      <Documentation>
        The name of the file to be written.
      </Documentation>
    </StringVectorProperty>

    <IntVectorProperty name="WriteAllTimeSteps"
      command="SetWriteAllTimeSteps"
      number_of_elements="1"
      default_values="0"
      label="Write all timesteps as file-series">
      <BooleanDomain name="bool" />
      <Documentation>
      When WriteAllTimeSteps is turned ON, the writer is executed
      once for each timestep available from the reader.
      </Documentation>
    </IntVectorProperty>

    <!-- MPI File Hints -->
    <IntVectorProperty
        name="UseCollectiveIO"
        lable="Collective IO"
        command="SetUseCollectiveIO"
        number_of_elements="1"
        default_values="2" >
      <EnumerationDomain name="enum">
        <Entry value="0" text="automatic"/>
        <Entry value="1" text="disabled"/>
        <Entry value="2" text="enabled"/>
      </EnumerationDomain>
      <Documentation>
        Turn on/off MPI-IO collective buffering.
      </Documentation>
    </IntVectorProperty>

    <IntVectorProperty
        name="NumberOfIONodes"
        lable="N IO Nodes"
        command="SetNumberOfIONodes"
        number_of_elements="1"
        default_values="0" >
      <Documentation>
        Set the number of IO nodes. Set to 0 to use the implementation default.
      </Documentation>
    </IntVectorProperty>

    <IntVectorProperty
        name="CollectBufferSize"
        lable="CIO Buffer Size"
        command="SetCollectBufferSize"
        number_of_elements="1"
        default_values="536870912">
      <EnumerationDomain name="enum">
        <Entry value="0"          text="default"/>
        <Entry value="536870912"  text=" 512 MB"/>
        <Entry value="1073741824" text=" 1.0 GB"/>
        <Entry value="1610612736" text=" 1.5 GB"/>
        <Entry value="2147483647" text=" 2.0 GB"/>
      </EnumerationDomain>
      <Documentation>
        Set the size of the buffer for aggregation. Set to 0 to use the implementation default.
      </Documentation>
    </IntVectorProperty>

    <IntVectorProperty
        name="UseDirectIO"
        lable="Direct IO"
        command="SetUseDirectIO"
        number_of_elements="1"
        default_values="0" >
      <EnumerationDomain name="enum">
        <Entry value="0" text="automatic"/>
        <Entry value="1" text="disabled"/>
        <Entry value="2" text="enabled"/>
      </EnumerationDomain>
      <Documentation>
        Turn on/off MPI-IO direct I/O
      </Documentation>
    </IntVectorProperty>

    <IntVectorProperty
        name="UseDeferredOpen"
        lable="Deferred Open"
        command="SetUseDeferredOpen"
        number_of_elements="1"
        default_values="0" >
      <EnumerationDomain name="enum">
        <Entry value="0" text="automatic"/>
        <Entry value="1" text="disabled"/>
        <Entry value="2" text="enabled"/>
      </EnumerationDomain>
      <Documentation>
        Turn on/off MPI-IO deferred.
      </Documentation>
    </IntVectorProperty>

    <IntVectorProperty
        name="UseDataSieving"
        lable="Data Sieving"
        command="SetUseDataSieving"
        number_of_elements="1"
        default_values="0" >
      <EnumerationDomain name="enum">
        <Entry value="0" text="automatic"/>
        <Entry value="1" text="disabled"/>
        <Entry value="2" text="enabled"/>
      </EnumerationDomain>
      <Documentation>
        Turn on/off MPI-IO data sieving.
      </Documentation>
    </IntVectorProperty>

    <IntVectorProperty
        name="SieveBufferSize"
        lable="Sieve Buffer Size"
        command="SetSieveBufferSize"
        number_of_elements="1"
        default_values="0" >
      <EnumerationDomain name="enum">
        <Entry value="0"        text="default"/>
        <Entry value="1048576"  text="1 MB"/>
        <Entry value="2097152"  text="2 MB"/>
        <Entry value="4194304"  text="4 MB"/>
        <Entry value="8388608"  text="8 MB"/>
        <Entry value="16777216" text="16 MB"/>
        <Entry value="33554432" text="32 MB"/>
      </EnumerationDomain>
      <Documentation>
        Set the size of the buffer for sieving. Set to 0 to use the implementation default.
      </Documentation>
    </IntVectorProperty>

    <IntVectorProperty
        name="StripeCount"
        lable="Stripe Count"
        command="SetStripeCount"
        number_of_elements="1"
        default_values="-1" >
      <EnumerationDomain name="enum">
        <Entry value="-1"  text="all OST"/>
        <Entry value="0"   text="default"/>
        <Entry value="16"  text=" 16 OST"/>
        <Entry value="32"  text=" 32 OST"/>
        <Entry value="64"  text=" 64 OST"/>
        <Entry value="128" text=" 128 OST"/>
        <Entry value="160" text=" 160 OST"/>
      </EnumerationDomain>
      <Documentation>
        Tell MPI how to set striping parameters. It's not clear if the mpi implementation uses these on Lustre.
        In the future this will be implemented via Lustre specific api.
      </Documentation>
    </IntVectorProperty>

    <IntVectorProperty
        name="StripeSize"
        lable="Stripe Size"
        command="SetStripeSize"
        number_of_elements="1"
        default_values="536870912" >
      <EnumerationDomain name="enum">
        <Entry value="0"          text="default"/>
        <Entry value="4194304"     text="  4 MB"/>
        <Entry value="16777216"    text=" 16 MB"/>
        <Entry value="33554432"    text=" 32 MB"/>
        <Entry value="67108864"    text=" 64 MB"/>
        <Entry value="134217728"   text="128 MB"/>
        <Entry value="268435456"   text="256 MB"/>
        <Entry value="536870912"  text=" 512 MB"/>
        <Entry value="1073741824" text=" 1.0 GB"/>
        <Entry value="1610612736" text=" 1.5 GB"/>
        <Entry value="2147483647" text=" 2.0 GB"/>
      </EnumerationDomain>
      <Documentation>
        Tell MPI how to set striping parameters. It's not clear if the mpi implementation uses these on Lustre.
        In the future this will be implemented via Lustre specific api.
      </Documentation>
    </IntVectorProperty>
    <!--
    <SubProxy>
      <Proxy name="Writer"
        proxygroup="internal_writers"
        proxyname="vtkSQBOVWriterCore">
      </Proxy>
      <ExposedProperties>
        <Property name="UseCollectiveIO"/>
        <Property name="UseDirectIO"/>
        <Property name="NumberOfIONodes"/>
        <Property name="CollectBufferSize"/>
        <Property name="UseDeferredOpen"/>
        <Property name="UseDataSieving"/>
        <Property name="SieveBufferSize"/>
      </ExposedProperties>
    </SubProxy>
    -->

    <Hints>
      <Property name="Input" show="0"/>
      <Property name="FileName" show="0"/>
      <WriterFactory extensions="bov" file_description="Parallel MPI-I/O BOV"/>
    </Hints>
    <!-- End of XMLPPolyDataWriter -->
  </WriterProxy>
</ProxyGroup>
</ServerManagerConfiguration>
